xdebug は、PHP で構築された web アプリケーションをプロファイリングして、ボトルネック調査をするツールです。
ダウンロード
% wget http://www.xdebug.org/files/xdebug-2.0.4.tgz
展開
% tar xvzf xdebug-2.0.4.tgz
phpize
% cd xdebug-2.0.4 % phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519
configure
% ./configure --enable-xdebug
make
% make
xdebug.soをコピー
% sudo cp -i modules/xdebug.so /path/to/php/modules
xdebug.ini 作成
% sudo vi /path/to/conf.d/xdebug.ini zend_extension = /path/to/php/modules/xdebug.so xdebug.profiler_enable = 1 xdebug.profiler_output_dir = /var/tmp/xdebug
ここでは xdebug のトレースログを格納するディレクトリとして、/var/tmp/xdebug 作成します。書き込み権限を与えておきます。
% mkdir -m 777 /var/tmp/xdebug
apache リロード
% sudo apachectl graceful
インストールできたか確認
% php -m : : : [Zend Modules] Xdebug
動作確認
適当な php スクリプトをブラウザで呼び出します。 トレースログは「xdebug_profiler_output_dir」で設定したディレクトリ に出力されます。
トレースログの確認
% ls /var/tmp/xdebug trace.2043925204.07673c.xt trace.2043925204.091f32.xt
トレースログをもとにプロファイリングするには「WinCacheGrind」が便利です。
WinCacheGrind
http://sourceforge.net/projects/wincachegrind/
使い方は簡単で、
上記画像はあるwebアプリケーションのプロファイリング結果です。
XMLParser_Base クラスの getXML メソッドの中で呼ばれている file_get_contents 関数に 832ミリ秒かかっていることが分かります。
[注意事項]
Xdebug は内部でかなり重い処理を行ってますので、通常運用時は動作しないようにしておきます。
% sudo vi /path/to/conf.d/xdebug.ini ;zend_extension = /path/to/php/modules/xdebug.so ;xdebug.profiler_enable = 1 ;xdebug.profiler_output_dir = /var/tmp/xdebug % sudo apachectl graceful