# プログラミング # 技術的な話題# 技術的な話題-PHP

xdebugとWinCacheGrindを使ったPHPのプロファイル

xdebugとWinCacheGrindを使ったPHPのプロファイル

お仕事で使っているPHPバッチ処理が遅くなってきているので、プロファイルを行ってリファクタリングをしようと思ったので、xdebugとWinCacheGrindを使ったプロファイル方法をメモ。

xdebugのプロファイルを有効化

Windows環境でXAMPPをインストールしている場合は、おそらく既にxdebugはインストールされているはずです。プロファイリングを有効化するにはC:\xampp[php](http://d.hatena.ne.jp/keyword/php)\[php](http://d.hatena.ne.jp/keyword/php).iniにて[xdebug](http://d.hatena.ne.jp/keyword/xdebug)を実行可能にするのと、[xdebug](http://d.hatena.ne.jp/keyword/xdebug)のプロファイルを有効にする必要があります。

; xdebugを有効化、注意点としてはphp_eacceleratorとは同時に動作しません zend_extension = “C:\xampp[php](http://d.hatena.ne.jp/keyword/php)\ext\[php](http://d.hatena.ne.jp/keyword/php)\_[xdebug](http://d.hatena.ne.jp/keyword/xdebug).dll

; プロファイルログの追記設定。1で有効化。本番環境などで使うとファイルが大きくなりすぎるので注意 xdebug.profiler_append = 0

; プロファイルの有効設定。1にすると有効化 xdebug.profiler_enable = 1

; プロファイルログファイルの出力先 xdebug.profiler_output_dir = “C:\xampp\tmp”

; プロファイルログファイル名と出力形式 xdebug.profiler_output_name = cachegrind.out.%s

xdebug.profiler_output_dirで指定した箇所にログファイルが出力されますので、それをWinCacheGrindで閲覧します。

ログファイルの出力名は初期設定では%pを使用するのですが、これはpidでログファイルをつくるためにスクリプト名で切り分けるのがめんどくさい。ファイル名ごとで出力する%sがおすすめです。

詳細は下記をどうぞ。

WinCacheGrindをダウンロード

上記よりWinCacheGrindをダウンロードします。exe実行形式なので、ダブルクリックすると実行します。xdebugのログファイルを開くと分析が始まります。

簡単な使い方としては、右側のビューでソートして時間がかかっている処理をあぶり出します。 そして、時間がかかっている項目を選択して、右下のウィンドウの項目をダブルクリックするとその項目の詳細へ飛びます。そこでさらに時間がかかっている項目を絞り込んでみる感じです。

WinCacheGrindは、ちょっと大きなプロファイルログをひらこうとするとすぐに落ちます。。安定性もあんまりなので、出来れば他ソフトを探してみたいところですね。