Puma/Unicornのメモリ大量消費を回避する [Ruby + jemalloc]
RailsアプリのアプリケーションサーバーにPuma/Unicornを使用すると時間経過とともに大量のメモリを消費します。
原因はPuma/Unicornではなく「Rubyのメモリ管理の仕様」のようです。
今回はPuma/UnicornのWorkerプロセスをKillするのではなく、Ruby本体を再コンパイル際にメモリを管理をする「jemalloc」を導入します。
導入メリット
自動でメモリを解放。ワーカープロセスをKillする必要はありません。
Rubyの再コンパイル
// CentOS sudo yum install jemalloc-devel // Ubuntu sudo apt install libjemalloc-dev // インストール RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.4 // リフレッシュ rbenv rehash // 設定 rbenv global 2.6.4
あとは、プーマ、ユニコーンを再起動させるだけです。
メモリに関して
環境によってはプロセスをKillした方が若干、良い場合があります。その場合は「Kill + jemalloc」にすると良いです。
ただ、Killする場合は、わずか1秒足らずのWorker再起動時に、アクセスが集中すると許容範囲を超えてページが表示されなくなる可能性があります。
スポンサーリンク
関連記事
- Rails6プロジェクトの各種初期設定
- Uncaught TypeError: $(...).toast is not a function [Rails/bootstrap]
- ReactをIE9/10/11に対応させる [Rails6]
- Nginx/Rails/PHPにFastCGIでPerl/Pythonを共存させる [CentOS]
- Rails6のプロジェクト作成時の「RAILS_ENV=development environment is not defined in config/webpacker.yml, falling back to production environment」のエラー対策
公開日:2019年10月03日 最終更新日:2019年11月30日
記事NO:02783