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

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の惜しいところ

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

2014年に購入した技術書

投稿数を稼ぐべく、とりあえず今年購入した(であろう)本をリストアップしつつ、今年の振り返りでも。

購入しただけで読めてないものや、途中のものもありますが、技術書なんてリファレンスなので全部読む必要もないわけで(言い訳)。 一度手放した本とか角川祭りとかでKindleストアでの購入が増えた年でした。Kindle3からPaperwhiteにアップデートしたのも大きい。 仕事上フロントエンド以外の広範囲を取り扱う機会が増えたため、読んだ本もわりと多岐にわたってます。

世の中的には、Immutable Infrastractureが一段落して、Docker, Golang, Microservicesなんかがバズワード化してました。

とくにGolangは日本語書籍は増えてないものの、Go製プロダクトが大量発生している状況は当分継続しそう。なので、いろんなRuby/Python/Perl/PHPなどLL製プロダクトのリプレースが進んでいくのでは。新しい流行としてはGolangにつづいてRust, Clojure, Elixrあたりがじわじわ来るんじゃないでしょうかね。

インフラ周りでいうと、コンテナ化、マルチクラウド、モニタリングまわりが大きく変化しそうです。

では、購入した書籍一覧です。購入日時はよくわからないので購入順には並んでません。(すべてアフィ無しリンクです)

プログラミング

アーキテクチャ

ミドルウェア

インフラ

読み物