前回、xhprofをインストールしたが
さらに調べてみたら、XHGUIというものがあるとのこと。
下記のサイトを参考にXHGUIをインストールし、Callgraphも一緒にインストールしてみようと思う。
PHPの遅い処理を解析するためにEC2にXHProf導入してみた
#環境
CentOS 6.5
PHP 5.5.15
#1.XHGUIインストール
1.XHGUIをダウンロードして、[DocumentRoot]配下にコピー。
# cd /usr/local/src
# wget https://github.com/preinheimer/xhprof/archive/master.zip
# unzip master.zip
# mkdir [DocumentRoot]/xhgui
# chown [apache実行ユーザー] [DocumentRoot]/xhgui
# cp -r xhgui-master/* [DocumentRoot]/xhgui/
2.httpd.confの設定
全てのPHPの処理前に「"[DocumentRoot]/xhgui/external/header.php"」が実行される様にするため
httpd.confに
「php_admin_value auto_prepend_file "[DocumentRoot]/xhgui/external/header.php"」
を下記のように追加
# vi httpd.conf
<VirtualHost *:80>
ServerName nandakana.com
DocumentRoot [DocumentRoot]
php_admin_value auto_prepend_file "[DocumentRoot]/xhgui/external/header.php"
</VirtualHost>
auto_prepend_fileについてはこちら
4.[DocumentRoot]/xhgui/external/header.phpを編集する。
header.phpを編集し、xhprofでプロファイリングできるようにする。
また、XHGUIへのアクセスがプロファイリングされないようにする。
//Determine wether or not to profile this URL randomly
if ($_xhprof['doprofile'] === false)
{
//Profile weighting, one in one hundred requests will be profiled without being specifically requested
if (rand(1, $weight) == 1)
{
$_xhprof['doprofile'] = true;
$_xhprof['type'] = 0;
}
}
↓変更
//Determine wether or not to profile this URL randomly
if (! strpos($_SERVER['REQUEST_URI'], 'xhprof_html') && $_xhprof['doprofile'] === false)
{
//Profile weighting, one in one hundred requests will be profiled without being specifically requested
// if (rand(1, $weight) == 1)
// {
$_xhprof['doprofile'] = true;
$_xhprof['type'] = 0;
// }
}
4.プロファイル格納DBへの接続設定
config.phpを編集する
# cd [DocumentRoot]/xhgui/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://[domain]/xhgui/xhprof_html'; # ←環境に応じて変更
5.DBの設定
DBに接続し、DB「xhprof」を作成し
[DocumentRoot]/xhgui/xhprof_lib/utils/Db/Pdo.phpに記載されているCREATE TABLEクエリを実行して
テーブルを作成する。
mysql > create database xhprof;
mysql > CREATE TABLE `details` (
`id` char(17) NOT NULL,
`url` varchar(255) default NULL,
`c_url` varchar(255) default NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`server name` varchar(64) default NULL,
`perfdata` MEDIUMBLOB,
`type` tinyint(4) default NULL,
`cookie` BLOB,
`post` BLOB,
`get` BLOB,
`pmu` int(11) unsigned default NULL,
`wt` int(11) unsigned default NULL,
`cpu` int(11) unsigned default NULL,
`server_id` char(3) NOT NULL default 't11',
`aggregateCalls_include` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `url` (`url`),
KEY `c_url` (`c_url`),
KEY `cpu` (`cpu`),
KEY `wt` (`wt`),
KEY `pmu` (`pmu`),
KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
6.XHGUIにアクセスして、画像のようなページが表示されたらOK。
http://(domain)/xhgui/xhprof_html/index.php
#2.Callgraphのインストール
1.yumでgraphviz graphviz-gdをインストール
# yum -y install graphviz graphviz-gd
2.config.phpを編集する。
# vi [DocumentRoot]/xhgui/xhprof_lib/config.php
$_xhprof['dot_binary'] = '/usr/bin/dot';
$_xhprof['dot_tempdir'] = '/tmp';
$_xhprof['dot_errfile'] = '/tmp/xh_dot.err';
3.各プロファイル画面にあるリンク「View Callgraph」をクリックして
下記のような画面が表示されたらOK