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の収集間隔より短い突発的な負荷は計測できないのでご注意ください。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。得意分野はWeb全般、Ruby on Rails、Androidアプリケーションなど。最近はBlinkと格闘中。軽度の資格マニアで、情報処理技術者試験(高度10区分)などを保有。

babaの書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ