herokuでMemory Quota Exceededと言うのが出るようになったので、puma_worker_killerを入れた話
最近、herokuで稼働させているRailsのアプリが「Memory Quota Exceeded」と言われる事が多くなり、定期的にワーカーの再起動をしたいと思ってました。
見る限り、swapも出てしまい、レスポンスも遅くなっているようです。
このような場合、heroku以外だと、unicornを使うので、unicorn_worker_killerを入れるのですが
herokuだとpuma推薦なのでpuma使っていました。
で、pumaもuniconのようにworker killer系の物があるのかな?と探してたところ
puma_worker_killerがあるようなので、使ってみました。
https://github.com/schneems/puma_worker_killer
herokuでの使い方は、「Turn on Rolling Restarts」というのを使うのが推薦のようなので
その設定で行ってみました。
before_fork do require 'puma_worker_killer' PumaWorkerKiller.enable_rolling_restart # Default is every 6 hours end
デフォルトだと6時間ごとに再起動ということになるので、ひとまず様子見で3時間に設定してみます。
以下が、3時間でリスタートがかかるようにした設定になります。
before_fork do require 'puma_worker_killer' PumaWorkerKiller.config do |config| config.rolling_restart_frequency = 6 * 3600 # 12 hours in seconds end PumaWorkerKiller.enable_rolling_restart end
こちらを設定したところ
ピーク時は少しswapが出る時もあるものの、割と落ち着いたのかなと思います。
しばらくはこの状態で様子見をし、アラートがまた増えるような感じであれば再度調整という事にしようと思います。