2015/03/04

Railsアプリをruby-profとqcachegrindでプロファイリング

遅いサイトをなんとかする必要があったので、まずは計測する。

最初に使ったrack-mini-profilerは大して役に立たないので無駄だった。

qcachegrindのインストール

% brew install qcachegrind graphviz

graphvizはqcachegrindでコールグラフの生成に使う

手順

  1. Gemfileにruby-profを追加

    group :profile do
      gem 'ruby-prof'
    end
    
  2. config.ruにprofの設定追加

    if Rails.env.profile?
      use Rack::RubyProf, :path => 'tmp/profile',
        :printers => {
          ::RubyProf::FlatPrinter => 'flat.txt',
          ::RubyProf::GraphPrinter => 'graph.txt',
          ::RubyProf::GraphHtmlPrinter => 'graph.html',
          ::RubyProf::CallStackPrinter => 'call_stack.html',
          ::RubyProf::CallTreePrinter => 'call_grind.txt',
        }
    end
    
  3. RAILS_ENV=profileの設定は適宜developmentあたりをコピーして作成。

  4. サーバを起動して、問題のページにアクセスする。

    ./bundle/bin/spring rails s -p 3001 -e profile
    
  5. tmp/profile/-call_grind.txtが生成されているのでqcachegrindに読み込ませる。

  6. Incl.やSelfの値の大きいところを目安にして、実際に遅い処理の部分を探す