ruby-profでコールグラフ

Rubyのプロファイラruby-profを使って、Railsの実行プロファイルをKCachegrindでビジュアル表示するまで。すごく手軽に使えます。

Ruby用のプロファイラがあります(標準添付もしてますが)。

  ruby-prof  使い方はこちら


 (※KCachegrindで表示した場合。かっこいいっす。)

ボトルネックメーカーの私としては、弄っておかねばなるまいっ。

ruby-prof単体で使うには、

> gem install ruby-prof
> ruby-prof yourscript.rb --file=prof.txt
> ruby-prof yourscript.rb --printer=graph_html --file=prof.html

などとします。後者だと、HTMLを出力してくれて、リンクであやしそうな数字を辿ることができます。



もちろん、Railsでもプロファイリング可能。

  > ruby-prof script/server --printer=graph_html --file=prof.html

・・・なんですが、もっとを出してKCachegrindを使ってビジュアライズしたいときは、Rails pluginとしてインストールする必要があるようです。

詳細はこちら。

  How to Profile Your Rails Application

ささっと使ってみると、

1.$RUBYGEMS/ruby-prof/rails_plugin/ruby-prof
  を、vendors/pluginsにコピー。

2.lib/profiling.rbを次のように修正。
  (実際はコメント/アンコメントするだけ)

 # Create a flat printer
 #printer = RubyProf::FlatPrinter.new(result)
 #printer.print(output, {:min_percent => 1,
 # :print_file => false})

 ## Used for KCacheGrind visualizations
 printer = RubyProf::CallTreePrinter.new(result)
 path = File.join(LOG_PATH, 'callgrind.out')
 File.open(path, 'w') do |file|
  printer.print(file, {:min_percent => 1,
             :print_file => true})
 end

それで、普通に(ruby-profではなくrubyで)Railsを起動する

  > ruby script/server

と、/log/callgrind.outを出力するので、このファイルを、KCachegrindで開くと、冒頭の画像のようになります。コールグラフ(右下)を出すにはGraphVizもインストールする必要があります。

※KCachegrindのWindowsポート:WinCachegrindでは、残念ながら読み込めませんでした。


コメント

コメントしてください

closed.