Peek - Railsアプリのプロファイリングツール

January 18, 2015 - ruby

Peekという、Railsアプリケーションに組み込めるプロファイリングツール(群)があります。 How we keep Github fastでも言及されているツールです。(2012年なので少し古いですが。)

プロファイリングツールと適正

プロファイリング用のツールはたくさんあって、時間がかかる特定の処理を改善するために使うものもあれば、常時記録して特異な変化を監視するものもあります。

今回は後者寄りの要件であり、これに見合うものとしてPeekを取り上げました。

Railsでこれ以外のツールとしては、rack-mini-profilernewrelic/rpmなどがあり、それらについて今回の要件と照合してみました。

newrelic rpm

newrelicのサービス上で結果が確認出来るだけではなく、デベロッパーモードの場合に”/newrelic”にアクセスするとリクエストごとのプロファイル結果が見れます。 ただ、別途”/newrelic”のURLを開く必要があり、パフォーマンスチェックを忘れがちになる可能性があります。

rack-mini-profiler

トータルの処理時間は画面隅に表示されるけれど、個々の処理時間については画面隅のボックスをクリックして詳細を開かないといけません。

peek

Peekは適切な粒度で常に目に入れることができるツールであり、常用するのにちょうど良いのでは、という印象です。

先のGihtubのブログでは”Mission controll bar”いう、スタッフがプロダクション環境でも常にパフォーマンスを確認できる仕組みが整えられています。

Peekのしくみ

しくみは以下ブログ記事が詳しいです。

リクエストごとにIDを発行し、そのリクエストごとに各種計測値をデータストア(ファイル、Redis、Memcached等)に保存。 ページ表示後に別リクエスト(“/peek/…”)として非同期で計測値を取得して、画面の要素を置換する、というしくみ。

Peekの拡張

Peek自体はプラットフォームを提供するだけで、実際の個々の値を記録したりするのはそのプラグイン。

対応しているのはAvailable Peek views に記載されています。仮にほしいものが見つからなかったとしても、わりと手軽に追加できるような仕組みになっています。

ということでmemcached用のプラグインをつくりました。

evan/memcachedという、cで実装されたruby用memcachedクライアントがあって、それを使ったmemcachedアクセスを記録するプラグインです。

このプラグインではMemcached#getMemcached#setメソッドにモンキーパッチあてて、回数と時間を記録しています。

  • 呼び出し回数(calls)
  • 総処理時間(duration)

に加えて、下記も記録できるようになっています。

  • キャッシュヒット数(Get[HIT])
  • キャッシュミス数(Get[MISS])
  • キャッシュ更新数(Set)

Peekの惜しいところ

要素が増えるとブラウザの横幅に収まりきらなくなって、折り返し&はみ出します。本当に必要な要素に絞る抑止力にはなりますが、もう少しコンパクトに収められるとよりよいかな、と。