ホーム > カテゴリ > Ruby・Ruby on Rails >

Puma/Unicornのメモリ大量消費を回避する [Ruby + jemalloc]

CentOSで各種サーバー構築(目次)

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