Stackprofは『どのメソッドにどれくらいの時間がかかっているか』を解析できるgemです。
今回はStackprofの利用方法について紹介します。
なお、Stackprofはflamegraphと組み合わせることで解析結果をグラフ化できる機能がありますが、今回の記事ではグラフ化の説明は省略します。
rubyは2.7.1、railsは6.0.3.6、stackprofは0.2.17を利用しています。
Stackprofを利用したプロファイリング手順
Stackprofを利用したプロファイリング手順は以下の通りです。
Stackprof
- Stackprofのインストールし、起動を有効化する
- 任意の手段で計測対象のアプリへリクエストを送る(ベンチマークの実行)
- ベンチマーク実行後、生成されたダンプファイルの中身をstackprofコマンドで確認・解析する
Stackprofの設定手順
Stackprofの設定手順について紹介します。
gemのインストール
Gemfile
group :development do
gem 'stackprof'
end
$ bundle
Rackミドルウェアの設定
config.ru
use StackProf::Middleware,
enabled: true,
save_every: 1,
Stackprofのオプションは以下の通りです。
| オプション | 意味 | デフォルト | 必須 |
|---|---|---|---|
| enabled | Stackprofの設定有無 | false | yes |
| save_every | サンプリング刻み | nil | yes |
| mode | サンプリングのモード。:cpu, :wall, :object, :customから選択可能 | :cpu | no |
| interval | サンプリングレート | 1000 | no |
| out | dump出力先 | tmp | no |
| raw | dumpファイルをグラフ表示する際に必須なオプション | false | no |
確認方法
Stackprofの設定完了後、アプリケーションにアクセスするとダンプファイルが生成されます。
$ cd /tmp
$ ls stackprof-cpu-*
stackprof-cpu-90-1621057736.dump stackprof-cpu-90-1621057741.dump stackprof-cpu-90-1621057749.dump
stackprof-cpu-90-1621057740.dump stackprof-cpu-90-1621057742.dump stackprof-cpu-90-1621057750.dump
ダンプファイルの中身はstackprofコマンドで確認できます。
$ stackprof tmp/stackprof-cpu-*.dump
--limitオプションで表示数の制限ができます。
$ stackprof tmp/stackprof-cpu-*.dump --text --limit 1
メソッドの詳細が知りたい場合は--methodを利用します。
$ stackprof tmp/stackprof-cpu-*.dump --method 'String#blank?'
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!



