16
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

xhprofを使ってみた(XHGUIとCallgraphインストール編)

Last updated at Posted at 2014-08-12

前回、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
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へのアクセスがプロファイリングされないようにする。

header.php
//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;
    } 
}

↓変更

header.php
//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
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

XHGUI.jpg

#2.Callgraphのインストール

1.yumでgraphviz graphviz-gdをインストール

# yum -y install graphviz graphviz-gd

2.config.phpを編集する。

# vi [DocumentRoot]/xhgui/xhprof_lib/config.php
config.php
$_xhprof['dot_binary']  = '/usr/bin/dot'; 
$_xhprof['dot_tempdir'] = '/tmp'; 
$_xhprof['dot_errfile'] = '/tmp/xh_dot.err';

3.各プロファイル画面にあるリンク「View Callgraph」をクリックして

graph.jpg

下記のような画面が表示されたらOK

graph_p.jpg

16
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?