首页 > 解决方案 > Ruby 内存使用量会增加,直到需要重新启动 docker 容器

问题描述

我有一个在 docker 容器内运行的 ruby​​ on rails 应用程序。应用程序运行正常,但我们注意到 ruby​​ 继续增加它的内存使用量,直到应用程序停止响应并且我们需要重新启动容器。寻找有关如何解决此问题的任何建议。

宝石文件

source 'https://rubygems.org'   

# Rails Dependencies
# =====================================================
gem 'rails', '~> 5.2.6'
gem 'bundler'
gem 'rake', '~> 12.3'
gem 'puma', '~> 4.3' 
gem 'mysql2', '>= 0.4.4', '< 0.6.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'jquery-rails'
gem 'jbuilder', '~> 2.5'
gem 'sdoc', '~> 0.4.0', group: :doc

gem 'bootsnap', '>= 1.1.0', require: false

# OAI-PMH 
# =====================================================
gem 'blacklight_oai_provider'

# Automatic Import
# =====================================================
gem 'whenever', require: false

# Hydra Dependencies
# =====================================================
gem 'active-fedora'
gem 'active-triples'
gem 'blacklight'

gem 'hydra-head'
gem 'ldp'
gem 'nokogiri'
gem 'solrizer'

gem 'rsolr'
gem 'devise'
gem 'devise-guests', '~> 0.5'

gem 'rdf', '<= 3.1.13'

# Capistrano
# =====================================================
# gem 'capistrano-rails'

# DEVELOPMENT AND TESTS ONLY
# ===================================================== 
group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'
  gem 'rspec-rails'
  gem 'jettywrapper'
  gem 'listen'
  gem 'fcrepo_wrapper', '~> 0.4'
  gem 'solr_wrapper', '~> 2.0'
end

group :test do
  gem 'factory_bot_rails'
end

group :development do
  gem 'web-console', '~> 2.0'
  gem 'spring'
end

dockerfile

FROM ruby:2.7.2

ENV BUNDLER_VERSION=2.2.27
ENV RAILS_VERSION=5.2.6

RUN mkdir -p /home/hydra
WORKDIR /home/hydra
ADD ./hydra /home/hydra

RUN apt-get update && apt-get -y install cron

# Use JEMALLOC instead
# JEMalloc is a faster garbage collection for Ruby.
# -------------------------------------------------------------------------------------------------
RUN apt-get install -y libjemalloc2 libjemalloc-dev
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so

RUN \
  gem update --system --quiet && \
  gem install bundler -v ${BUNDLER_VERSION} && \
  gem install rails -v ${RAILS_VERSION} && \
  bundle install --jobs=4 --retry=3

# Node.js
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y nodejs

ADD ./startup.sh /usr/bin/
RUN chmod -v +x /usr/bin/startup.sh
ENTRYPOINT ["/usr/bin/startup.sh"]

标签: ruby-on-railsrubydocker

解决方案


推荐阅读