̃Gg[͂ĂȃubN}[Nɒlj

PHP :: xdebug のインストールと設定



xdebug は、PHP で構築された web アプリケーションをプロファイリングして、ボトルネック調査をするツールです。

  • よくあるタスク
    • 処理速度の遅い web アプリケーションの改修が必要になる。
  • 今までの自分
    • 憶測で手当たり次第にソースを修正し、運よくパフォーマンスが向上して喜ぶ。(向上しない場合もしばしば)
    • どのくらい向上したかは、数値でなく体感や感覚。
  • これからの自分
    • xdebug で発見したボトルネック箇所をピンポイントで修正し、パフォーマンスが向上して喜ぶ。
    • どのくらい向上したかは、数値で比較できる。



インストールと設定

ダウンロード

% 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
  • コピー先は環境により異なります
    • php.ini で 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.iniを設置するパスは環境により異なります
    • % locate php.d などして検索します

ここでは xdebug のトレースログを格納するディレクトリとして、/var/tmp/xdebug 作成します。書き込み権限を与えておきます。

% mkdir -m 777 /var/tmp/xdebug

apache リロード

% sudo apachectl graceful

インストールできたか確認

% php -m
  :
  : 
  :
[Zend Modules]
Xdebug
  • Xdebug がリストにあればインストールおよび設定完了です

動作確認

適当な php スクリプトをブラウザで呼び出します。
トレースログは「xdebug_profiler_output_dir」で設定したディレクトリ
に出力されます。

トレースログの確認

% ls /var/tmp/xdebug
trace.2043925204.07673c.xt  trace.2043925204.091f32.xt



WinCacheGrind

トレースログをもとにプロファイリングするには「WinCacheGrind」が便利です。

WinCacheGrind
http://sourceforge.net/projects/wincachegrind/

使い方は簡単で、

  1. WinCacheGrind をインストール。
  2. トレースログをローカルPCに保存。
  3. WinCacheGrind でトレースログを読み込む。
  4. きれいなGUI表示でプロファイリング結果を見ることができます。

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
  • xdebug.ini の各行をコメントアウトして、apache をリロード。



programming/php/install/xdebug.txt