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再起動時に、アクセスが集中すると許容範囲を超えてページが表示されなくなる可能性があります。
スポンサーリンク
関連記事
公開日:2019年10月03日 最終更新日:2019年11月30日
記事NO:02783