【Ruby】Stackprofでベンチマークのプロファイリングを行う手順

Ruby

Stackprofは『どのメソッドにどれくらいの時間がかかっているか』を解析できるgemです。
今回はStackprofの利用方法について紹介します。

なお、Stackprofはflamegraphと組み合わせることで解析結果をグラフ化できる機能がありますが、今回の記事ではグラフ化の説明は省略します。

rubyは2.7.1、railsは6.0.3.6、stackprofは0.2.17を利用しています。

Stackprofを利用したプロファイリング手順

Stackprofを利用したプロファイリング手順は以下の通りです。

Stackprof
  1. Stackprofのインストールし、起動を有効化する
  2. 任意の手段で計測対象のアプリへリクエストを送る(ベンチマークの実行)
  3. ベンチマーク実行後、生成されたダンプファイルの中身を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)やってます。フォローしてもらえるとうれしいです!

参考