Unicornのワーカー数を増やすべきか考えるために、今いくつのワーカーがリクエストを捌いているのかさくっと調べたいことがあると思います。
Passengerだとpassenger-statusコマンドが標準で付いていて便利なのですが、Unicornではそうもいきません。
今知りたい場合
たとえば以下のような1行コマンドで調べられます。
ps l --ppid=`cat /path/to/rails/tmp/pids/unicorn.pid` | \ awk "{ print \$10}" | grep R | wc -l
これは、masterプロセスの子プロセスを一覧してステータスがTASK_RUNNINGのものを数えているだけです。
多少雑ですが、watchで数秒おきに見ておけば、負荷状況がざっくりとわかります。
muninで監視する場合
これだけだと短いので、muninで監視する設定も書いておきます。
muninで監視するならプラグインが用意されているのでそれを使うのが簡単です。
GitHubページ
この3ファイルを/usr/share/munin/pluginsにでも置いておいて、symbolic linkを置いて使います。
ln -s /usr/share/munin/plugins/unicorn_ /etc/munin/plugins/unicorn_average ln -s /usr/share/munin/plugins/unicorn_ /etc/munin/plugins/unicorn_memory ln -s /usr/share/munin/plugins/unicorn_ /etc/munin/plugins/unicorn_processes ln -s /usr/share/munin/plugins/unicorn_status /etc/munin/plugins/ ln -s /usr/share/munin/plugins/unicorn_memory_status /etc/munin/plugins/
設定ファイルも書いておきます。
# /etc/munin/plugin-conf.d/unicorn [unicorn_*] env.rails_root /path/to/railsroot
その他必要に応じて以下の編集をします。
- /usr/share/munin/plugins/unicorn_はgrep "unicorn_worker"としている箇所があるので、grep "uincorn_rails worker"に書き換える
- /usr/share/munin/plugins/unicorn_statusと/usr/share/munin/plugins/unicorn_memory_statusの1行目のRubyのパスを、RVM経由のパスに書き換える
動作確認します。
sudo munin-run unicorn_average sudo munin-run unicorn_memory sudo munin-run unicorn_processes sudo munin-run unicorn_status sudo munin-run unicorn_memory_status
これで、メモリ使用量やワーカー数をMuninで監視することができます。
ちなみにこのプラグインでは、ワーカーのactive/idleを、「1秒sleepしてCPU timeが進んだかどうか」で判断しているようです。
途中で設定間違えてグラフが消えていますが、無事監視できました。暇してるなあ。
ちなみに、当然ながらwatchコマンドやmuninの収集間隔より短い突発的な負荷は計測できないのでご注意ください。