# xhprof
http://php.net/manual/ja/book.xhprof.php
XHProf は、軽量で階層型な命令ベースのプロファイラです。 データ収集フェーズでは、呼び出し回数や プログラムの動的コールグラフ内の弧の包括的メトリクスを追跡します。 排他的メトリクス (実行時間や CPU 時間、メモリ使用量など) の計算は、レポーティングや後処理のフェーズで行います。 関数のプロファイルは、呼び出す側と呼び出される側に分けることができます。 XHProf が再帰関数を扱うときには、コールグラフ内での循環をデータ収集時に検出し、 循環を回避するために、再帰の実行のたびにその深さも含めた一意な名前をつけます。
## Install
### xhprof
# pecl search xhprof Retrieving data...0% Matched packages, channel pecl.php.net: ======================================= Package Stable/(Latest) Local xhprof 0.9.4 (beta) XHProf: A Hierarchical Profiler for PHP
# pecl install xhprof-0.9.4 downloading xhprof-0.9.4.tgz ... Starting to download xhprof-0.9.4.tgz (842,077 bytes) ~省略~ Build process completed successfully Installing '/usr/lib64/php/modules/xhprof.so' install ok: channel://pecl.php.net/xhprof-0.9.4 configuration option "php_ini" is not set to php.ini location You should add "extension=xhprof.so" to php.ini
# echo "extension=xhprof.so" > /etc/php.d/xhprof.ini
# xhgui
https://github.com/perftools/xhgui
A graphical interface for XHProf data built on MongoDB.
This tool requires that XHProf or its one of its forks Uprofiler, Tideways are installed. XHProf is a PHP Extension that records and provides profiling data. XHGui (this tool) takes that information, saves it in MongoDB, and provides a convenient GUI for working with it.
## Install
### php-mcrypt
xhguiと同時にインストールされるslim(http://www.slimframework.com/)に必要。
# yum --enablerepo=remi,remi-php56 install php-mcrypt
### MongoDB Extension
# yum install openssl-devel
# pecl install mongodb ~省略~ Build process completed successfully Installing '/usr/lib64/php/modules/mongodb.so' install ok: channel://pecl.php.net/mongodb-1.1.7 configuration option "php_ini" is not set to php.ini location You should add "extension=mongodb.so" to php.ini
# echo "extension=mongodb.so" > /etc/php.d/mongodb.ini
### xhgui
ブラウザからアクセスして結果を確認するので、ブラウザからアクセスできる場所、または、
シンボリックリンクでアクセス可能な場所などに設置する。
# cd /var/www # git clone https://github.com/perftools/xhgui.git # cd xhgui # chmod -R 0777 cache # php install.php
Downloading composer. Downloading 1.1.2... ~省略~ Installing dependencies. ~省略~ Checking permissions for cache directory. Permissions on cache/ are ok.
## Configuration
### apache
すべてのPHPの処理前にプロファイラが実行されるようにする。
# cp -a /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk # vi /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/ebi-api/current/web" SetEnv APP_ENV development
+) php_admin_value auto_prepend_file "/var/www/xhgui/external/header.php"
<Directory />
# /etc/rc.d/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
### xhgui
(出力先mongodb前提で)mongodbのサーバ、ポートを指定する。
(内向きツールや画像など)特定URIにアクセスしたときはプロファイルしない設定を追加する。
# cd /var/www # cp -a ./xhgui/config/config.default.php ./xhgui/config/config.default.php.bk # vi ./xhgui/config/config.default.php
19c19 < 'db.host' => 'mongodb://adm01:27017', > 'db.host' => 'mongodb://127.0.0.1:27017', 33,36d32 < if (strpos($_SERVER['REQUEST_URI'], 'xhgui')) return false; < if (strpos($_SERVER['REQUEST_URI'], 'apc')) return false; < if (strpos($_SERVER['REQUEST_URI'], 'favicon')) return false; <