# 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" # /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; <