XHProf + XHGuiをInstallしてPHPの実行結果を監視、解析する

php_profilerXHProfが便利と教えてもらったので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';

こんな感じに表示される。

 

callgraph.php

どの処理が遅いか見つけるのに役に立ちそう。

 

< Related Posts >