PhpStorm で PHPスクリプトの実行を解析する(Xdebugのプロファイラの結果を表示する)

PhpStorm で PHPスクリプトの実行を解析する(Xdebugのプロファイラの結果を表示する)

イメージ

こんにちは、tanakaです。今日はPhpStorm で、Xdebugのリモートデバッグ環境を作るに引き続いて、プロファイラ機能を紹介します。

Xdebugのプロファイラ機能とPhpStorm

Xdebugのプロファイラ機能というのは、1セッションの間に読み込んだPHPスクリプトや関数の実行にかかった時間を集計し、ログとして保存する機能です。
PhpStorm のプロファイラ機能は、リモートデバッグよりもシンプルです。Xdebugでプロファイル保存の機能を有効にして、ブラウザにて開発環境のサイトを表示します。そうすると特定のディレクトリに「cachegrind.out.12345」などのファイル名でログが保存されますので、PhpStormのメニューから開くと、わかりやすく表示してくれる、というものです。
本家ブログ新機能紹介では"Xdebug profiler integration"(Xdebugプロファイラ統合)と書いてありますが、使ってみた感触としては、プロファイリングログビューアという感じ。手軽に使えるツールです。

Xdebug でプロファイル機能を有効にする

前回の設定で、php.iniのXdebug設定は以下のようになっています。

[xdebug]
xdebug.default_enable = 1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_handler = "dbgp"
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1

これに次の行を追加しましょう。

xdebug.profiler_enable_trigger = 1

この設定にすると、デフォルトではプロファイルを保存しないけど、ブラウザ側から指示があったときは保存する、という設定です。
さて、ブラウザからプロファイラを有効にするにはZend Debugger & Xdebug bookmarklets generator for PhpStormで作成できるブックマークレットを使います。

20121107_phpstorm_profiler02.png

Xdebugの方のGenerateボタンを押して表示されるリンクの中で「Start profiler」と「Stop profiler」をブラウザのブックマークツールバーにドラッグしましょう。フォルダを作ってまとめるのもよいですね。設定が終わったら、Webサーバーを再起動(再読み込み)して、プロファイルしたいサイトを表示してブックマークレット「Start profiler」をクリックしましょう。このブックマークレットがやることは、単にCookieを生成しているだけです。もう一度ページを読み込めば、プロファイルを有効にするCookieがサイトに送信され、プロファイルが保存されます。

プロファイル結果をPhpStormで表示する

プロファイル結果はどこに保存されているのでしょう。それはphp.iniの設定、xdebug.profiler_output_dir とxdebug.profiler_output_name によります。MacPortsな環境ではそれぞれ /var/tmp/ , cachegrind.out.%p となりました。この設定は、phpinfo();の結果を見るか、コンソールにて、"php -i | grep xdebug.profiler_output" と実行すれば確認できます。
さて、いままでの設定がうまくいっていれば、cachegrind.out.12345 などのファイルがあるはずです。もし、WebサーバーとIDEのマシンが別なら、そのファイルをPhpStormからアクセスできるところにもってきましょう。メニューバーからTools → Analyze Xdebug Profiler Snapshot を選択するとファイル選択ダイアログが表示されますので、cachegrind.out.xxxxxというファイルを開きましょう。

20121107_phpstorm_profiler03.png

上に2つ、下に2つタブがありますが次のような意味みたいです。

Execution Statistics (上のパネル)
セッション中に呼び出した関数がフラットに並んだ表です。スクリプトの実行にかかった時間や呼び出し回数の表です。ここではそれぞれの関数が1セッションで何回呼び出されどのくらいの時間がかかったか把握できます。呼び出し時間の単位は、一番上のTime: で「秒/ミリ秒/マイクロ秒」の3つから選べます。
Call Tree (上のパネル)
関数の呼び出しがツリー表示されます。
Callees (下のパネル)
上のパネルで選択した関数がどんな関数を呼び出して、どのくらい時間がかかったのかを知ることができます。
Callers (下のパネル)
Callees とは逆に、上のパネルで選択した関数が、どんな関数から呼び出されたのかを集計できます。

上の説明では、すべて「関数」で説明してますが、このツールでは関数/メソッド/スクリプト読み込みが同列に扱われます。(アイコンは違いますが)

さて、ここまででプロファイラの利用方法と画面について説明しました。このプロファイル結果を表示するツール、他の種々の機能とは割と独立したツールですが、プロジェクトのパスマッピングをうまくしていれば、関数を右クリックしてソースコードにジャンプできます。さすがのIDEですね!

まとめ

Xdebugでプロファイルして、ツールを使って、アプリケーションを普段とは違う角度でチェックする。知っておくといざというとき役に立ちそうです。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ