XHProf + XHGuiをInstallしてPHPの実行結果を監視、解析する
XHProfが便利と教えてもらったのでInstallしてみたときの覚書。
環境: CentOS 5.8, PHP 5.3.19, XHProf 0.9.2 (beta), nginx 1.2.5, mysql 5.5.28, Graphviz 2.12
参考にしたのは下記Site
Install XHProf
PECL(ピクル)に対応しているので、Install自体は簡単。
# pecl install xhprof-0.9.2
設定Fileを作成
# vi /etc/php.d/xhprof.ini
extension=xhprof.so
# /etc/rc.d/init.d/php-fpm restart
Install XHGui
preinheimer/xhprof@GitHubからDownloadする。mysql serverはInstallしてある前提。
どこかに配置してconfigを設定
# cd /opt/xhprof/xhprof_lib/
# cp config.sample.php config.php
# vi config.php
$_xhprof['dbtype'] = 'mysql'; // Only relevant for PDO
$_xhprof['dbhost'] = 'localhost';
$_xhprof['dbuser'] = 'root';
$_xhprof['dbpass'] = 'password'; // ※変更
$_xhprof['dbname'] = 'xhprof';
$_xhprof['dbadapter'] = 'Mysql'; // ※変更
$_xhprof['servername'] = 'myserver'; // ※変更
$_xhprof['namespace'] = 'myapp'; // ※変更
$_xhprof['url'] = 'http://url/to/xhprof/xhprof_html'; // ※変更$controlIPs = false; //Disables access controlls completely.
//$controlIPs = array();
//$controlIPs[] = "127.0.0.1"; // localhost, you'll want to add your own ip here
//$controlIPs[] = "::1"; // localhost IP v6
MySQLに「xhprof」というDatabaseを作る。
xhprof_lib\utils\Db\Mysql.php内のCreate table文を実行。
xhprof_htmlを公開する。
# vi /etc/nginx/conf.d/hoge.conf
server {
listen 80;
server_name xhprof.hoge.com;root /opt/xhprof/xhprof_html/;
index index.php index.html index.htm;
charset utf-8;location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }location ~* \.php$ {
expires off;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
解析したいSiteにheader.phpとfooter.phpを自動で追加するような設定をする。下記Siteを参考に。
# vi /etc/nginx/conf.d/wordpress.conf
server {
・・・
location ~* \.php$ {
expires off;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "auto_prepend_file=/opt/xhprof/external/header.php \n auto_append_file=/opt/xhprof/external/footer.php"; // この行を追加
}}
再起動
# /etc/rc.d/init.d/nginx restart
# /etc/rc.d/init.d/php-fpm restart
これで解析したいSiteのURLに「_profile=1」を付けてアクセスすると、以降は自動で解析し続ける。(Cookieに保存しているから)
停止するときは「_profile=0」を付けてアクセスする。
例えば
http://wordpress.hoge.com/?_profile=1
に接続すれば解析が始まる。
Callgraphを使えるようにGraphvizもInstall
Installはyum経由で
# yum install graphviz graphviz-gd
config.phpを編集
# xhprof_lib/config.php
$_xhprof['dot_binary'] = '/usr/bin/dot';
$_xhprof['dot_tempdir'] = '/tmp';
$_xhprof['dot_errfile'] = '/tmp/xh_dot.err';
こんな感じに表示される。
どの処理が遅いか見つけるのに役に立ちそう。
< Related Posts >