こんにちは。田中です。
サイトのパフォーマンスを上げるためにPHPプロファイルが必要になることがあります。
今回のテーマはphpプロファイルのためのxdebug+webgrind環境構築についてです。
前提条件:サーバーにphpとapacheが入っていること。CentOS5に入れました。
1.xdebugのインストール
peclのパッケージをインストールします。
$ yum install php-pecl-xdebug
次に設定ファイルを作成します。
$ vi /etc/php.d/xdebug.ini
zend_extension=/usr/lib/php/modules/xdebug.so;xdebugを有効にする xdebug.profiler_enable=1 ;パラメータのXDEBUG_PROFILEをトリガーにして実行する xdebug.profiler_enable_trigger=1 xdebug.profiler_output_dir=/tmp
サーバーのWEBページ全てでプロファイルするとログが大量になるので、
トリガーで実行する状態にしておくと便利です。
2.webgrindのインストール
ソースはこちらからダウンロードします。
DocumentRootの直下に置きます。
/var/www/html/webgrind
3.プロファイル取得
- http://example.com/?XDEBUG_PROFILE
- http://example.com/item/list?XDEBUG_PROFILE
のように、実行するページのURL引数を追加
(POST/GET引数、COOKIEでも良い)
- http://example.com/webgrind
URL直下にwebgrindを入れて表示。
各処理の「Invocation Count」「Total Self Cost」「Total Inclusive Cost」が表示され、
それぞれソートできます。
どこが重くなっているのかは一目瞭然です。
PHP関数も(array_**とか)表示されますが、非表示にすることもできます。
キャッシュファイル名はデフォルトで時間がファイル名に入りますが、
xdebug.iniの設定によってスクリプト名のみのファイル名にすることもできます。
他にもプロファイル方法はあるようですが、MySQL限定のものもあり、
今回PostgreSQLを使っているサイトのプロファイルにあたってはこちらを利用してみました。
関連記事:Xdebugを使い倒す5つのTIPS