Tech Racho エンジニアの「?」を「!」に。
  • インフラ
  • 開発

Unicornがどれくらい仕事してるかさくっと調べる

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が進んだかどうか」で判断しているようです。

unicorn-status

途中で設定間違えてグラフが消えていますが、無事監視できました。暇してるなあ。
ちなみに、当然ながらwatchコマンドやmuninの収集間隔より短い突発的な負荷は計測できないのでご注意ください。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。