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

Pumaがメモリを大食いするのを防ぐ [puma_worker_killer]

Ruby on Railsでアプリケーションサーバーに「Puma」を使用していると、時間経過とともにメモリを大量に使用します。今回はpuma_worker_killerというgemを使用してそれを回避するようにします。

起動時のメモリ

Puma起動時の使用済みメモリは528MB。

6時間経過後

1313MBになっていました。

このメモリの大食い対策をするには「puma_worker_killer」を使用します。

Gemfile

次のgemを追加します。その後はbundleして下さい。

gem 'puma_worker_killer'

config/puma.rbの編集

次のコードを追加します。

before_fork do

  PumaWorkerKiller.config do |config|

    # 1. サーバのRAMを記述する(MB単位)
    config.ram = 1837

    # 2. メモリ使用率の確認頻度(秒単位) ※(例)24時間に1回
    config.frequency = 24 * 60 * 60

    # 3. メモリ使用率(%) ※(例)90%
    # ※2の確認時にこの値を超えるとWorkerが再起動される
    config.percent_usage = 0.90

    # 4. 2/3とは別にWorkerを再起動する周期(秒単位) ※(例)3分毎
    config.rolling_restart_frequency = 3 * 60

    # 5. 監視ログの出力
    config.reaper_status_logs = false

  end
  PumaWorkerKiller.start
end

ワーカーの再起動は「メモリ使用率」「周期」の2種類の方法があります。

上記の例では3分毎に一番メモリ使用量の多いWorkerを自動で再起動します。それに加えて、24時間毎に1回メモリ使用率を確認して90%を超えれば再起動するというのも含まれています。

Nginx + Pumaで複数のRailsプロジェクトを実行するの記事を参考した方は「プロジェクト名/my_puma.rb」のファイルに追加して下さい。

対策後

私の環境ではおおよそ、550-800MBくらいで安定しています。

参考URL

https://github.com/schneems/puma_worker_killer (公式)





関連記事



公開日:2019年10月02日 最終更新日:2019年10月03日
記事NO:02782


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律