yamarkz's blog

紫陽花

unicorn-worker-killerを導入

Railsのプロダクトでサーバーのメモリが足りなくなる問題が頻発しました。

構成はnginx + unicorn

unicornのワーカープロセスは、起動後ユーザーからのリクエストを処理し、再起動されることがありません。 長期間の運用を続けるとメモリが徐々に食いつぶされ次第に枯渇していきます。 結果、リクエストが集中していない時間帯でもdatadogのアラートな鳴りまくる事態に陥っていました。

この状況を「unicorn-worker-killer」を導入し、解決しました。

f:id:Yamakichi:20170710225857p:plain

下記ブログを参考にさせていただきました。

Unicorn-worker-killerが便利だった件

unicorn-worker-killerを使うことで、ワーカプロセスが以下の条件の場合に、自動的に再起動してくれます。 - ワーカプロセスが指定回数のリクエストを処理した場合 - ワーカプロセスが指定量のメモリを使用している場合

Gemの導入

gem 'unicorn-worker-killer'

config.ruに設定を記述 [参考]

unless ENV['RAILS_ENV'] == 'development'
  require 'unicorn/worker_killer'
  CHECK_CYCLE = 16
  use Unicorn::WorkerKiller::Oom, (400*(1024**2)), (500*(1024**2)), CHECK_CYCLE
end
  • graceful restartとは?

graceful restart (緩やかな再起動)

グレースフル・リスタート

Apacheのrestartやgraceful、stopなどの違い