stackprofを試しに使う

先日のRubyKaigi2014で紹介されたstackprofという解析ツールがあったので、試しに使ってみた。
設定は簡単で

gem install 'stackprof'

で入ります。Railsで使う場合はGemfileにセットしても良いかもしれません。
書いたらbundle installを実行。以上で設定は終わりです。

では実行してみましょ

bundle exec stackprof tmp/stackprof-cpu-*.dump

これやると以下のように表示されます。

==================================
  Mode: cpu(1000)
  Samples: 1319 (17.97% miss rate)
  GC: 151 (11.45%)
==================================
     TOTAL    (pct)     SAMPLES    (pct)     FRAME
       222  (16.8%)         222  (16.8%)     Pathname#chop_basename
       128   (9.7%)         102   (7.7%)     Hike::Index#entries
        59   (4.5%)          59   (4.5%)     block in BetterErrors::ExceptionExtension#set_backtrace
        76   (5.8%)          57   (4.3%)     ActiveSupport::FileUpdateChecker#watched
        97   (7.4%)          45   (3.4%)     block (2 levels) in BindingOfCaller::BindingExtensions#callers
        41   (3.1%)          41   (3.1%)     Sprockets::Mime#mime_types
        38   (2.9%)          38   (2.9%)     #<Module:0x00000101070218>.load_with_autoloading
        26   (2.0%)          26   (2.0%)     block in Hike::Index#entries
        30   (2.3%)          26   (2.0%)     Hike::Index#build_pattern_for
        48   (3.6%)          24   (1.8%)     Hike::Index#sort_matches
        21   (1.6%)          21   (1.6%)     block in Hike::Index#find_aliases_for
        21   (1.6%)          20   (1.5%)     block in ActiveRecord::Migrator.migrations
       134  (10.2%)          20   (1.5%)     Pathname#plus
        19   (1.4%)          19   (1.4%)     block in ActiveSupport::FileUpdateChecker#watched
        24   (1.8%)          17   (1.3%)     Sprockets::Asset#dependency_fresh?
        55   (4.2%)          14   (1.1%)     Sprockets::Cache::FileStore#[]
        13   (1.0%)          13   (1.0%)     block in ActionView::PathResolver#find_template_paths
        13   (1.0%)          12   (0.9%)     block in ActiveSupport::FileUpdateChecker#max_mtime
        23   (1.7%)          10   (0.8%)     ActionView::PathResolver#find_template_paths
        10   (0.8%)          10   (0.8%)     Sprockets::Server#etag
         9   (0.7%)           9   (0.7%)     block in Hike::Index#initialize
       143  (10.8%)           9   (0.7%)     Pathname#+
       110   (8.3%)           8   (0.6%)     Pathname#relative?
         8   (0.6%)           8   (0.6%)     ActiveSupport::PerThreadRegistry#instance
        10   (0.8%)           7   (0.5%)     block in ActiveSupport::Dependencies::Loadable#require
       260  (19.7%)           7   (0.5%)     Pathname#join
         6   (0.5%)           6   (0.5%)     Hike::Trail#stat
         6   (0.5%)           6   (0.5%)     NewRelic::Agent::Agent.config
        18   (1.4%)           5   (0.4%)     Sprockets::AssetAttributes#logical_path
         7   (0.5%)           5   (0.4%)     Time.parse

うーん、なるほど