memori

Alternative facts

php と xdebug-profiler できれいな画像をだしてみた

おひさしぶりです!何ヶ月ぶりだっていう感じですが,たまにはブログを書いてみますか。

僕は今オトバンクという会社で開発をしたりしなかったりしているんですが,自社のサービスの速度に不満があるわけです。とはいうものの,どこが遅いのかとか真面目に調べたことがなかったので,いっちょやってみっかと言う話です。

で,最初は PEAR の Benchmark_Timer とか Benchmark_Profiler とかをあちこちに仕込んでたんですが,xdebug にも profiler があることを思い出して,いろいろやってみました。(といっても,たいしたことしてないですが)

うまくいくと,下のような画像ができます。

profiler

今回試した環境はざっくりこんなかんじ。

とりあえず,xdebug の profiler を有効にします。

xdebug.profiler_enable=1
xdebug.profiler_output_dir="/var/log/xdebug"
xdebug.profiler_output_name = cachegrind.out.%s

こうすると,/var/log/xdebug ディレクトリに cachegrind.out._path_to_hoge_php みたいなファイルが出来ます。あ,もちろん Apache とかに書き込み権限が無いとだめですよ。

生成されたファイルは WinCacheGrind とかを使って開くことができます。このままでも楽しいんですが,もっとステキに見たいわけです。見える化ってやつですね。(たぶん)

そこで,xdebugtoolkit というものを使います。

こいつは,さっきのファイルを graphviz とかで扱える dot ファイルにしてくれます。dot ファイルにしてしまえば graphviz で好き勝手出力できるわけですよ。ほら,簡単でしょ。

./cg2dot.py /var/log/xdebug/cachegrind.out._path_to_hoge_php | dot -Tpng -ooutput.png

こんな感じで叩いてあげれば output.png として出力されます。(graphviz が対応している format なら何でも出せると思う)

こいつで作ったのが最初に貼りつけた画像(例としてOpenpearのトップページを実行したもの)です。

こうやってみると,楽しいですよね。いろいろフレームワークの比較とかもしてみたい気になりますね。誰かやってくれるよねきっと。