Edited at

PHP7でXHProfを利用する方法(暫定版)

More than 3 years have passed since last update.

PHP7に対応したXHProfを見つけて動作確認を行ったので記録を残しておきます。

https://github.com/Yaoguais/phpng-xhprof


!! 注意 !!

本家 は正式にPHP7対応を行っていません。

こちらは有志がPHP7対応を行ったFork版です。

PHP7 RC1への対応が行われたものがstable版でも動いているだけであって、今後も動作する保証はありません。

自己責任で利用して下さい。


XHProfとは

ボトルネック調査に特化したFacebook製PHPプロファイラです。

詳細はこちらを参考にしてください。

https://quartet-communications.com/info/topics/12238


検証環境


  • PHP 7.0.3

  • CentOS 6.5


導入手順

以下のプロジェクトが存在している前提で導入を進めます。

composerもグローバルインストールされているものとします。


プロジェクト構成

/var/www/html

└ project
└ index.php
└ bootstrap_xhprof.php


1. XHProfをインストール

$ cd /tmp

$ git clone https://github.com/Yaoguais/phpng-xhprof.git
$ cd phpng-xhprof/
$ phpize
$ make && make test && make install


2. XHProf ExtensionをPHP7に適用

$ cat << EOS > /etc/php.d/xhprof.ini

[xhprof]
extension=phpng_xhprof.so
xhprof.output_dir = /tmp/xhprof
EOS
$ mkdir -m 777 /tmp/xhprof
$ service httpd restart


3. コールグラフ表示に必要なパッケージを導入

graphvizの依存パッケージには既に保守されていないものがあるので、

依存解決出来ないものはyum-skip-brokenで弾く。

$ cd /etc/yum.repos.d/

$ wget http://www.graphviz.org/graphviz-rhel.repo
$ yum -y install yum-skip-broken
$ yum -y --skip-broken install 'graphviz*'


4. プロジェクトにXHProfビューアを導入

$ cd /var/www/html/project

$ composer require facebook/xhprof dev-master
$ cp vendor/facebook/xhprof/xhprof_html/ ../ -rf
$ cp vendor/facebook/xhprof/xhprof_lib/ ../ -rf


4. プロジェクトにデバッグコードを記述


index.php

<?php

require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/bootstrap_xhprof.php';


bootstrap_xhprof.php

<?php

xhprof_enable();
register_shutdown_function(function() {
$data = xhprof_disable();
$runs = new XHProfRuns_Default();
$runs->save_run($data, 'APPLICATION_NAME');
});


補足. 最終的なプロジェクト構成

/var/www/

html
└ project
└ bootstrap_xhprof.php
└ composer.json
└ composer.lock
└ index.php
└ vendor
└ autoload.php
└ ...
└ xhprof_html
└ xhprof_lib


実行

ドメイン部は環境に応じて読み替えてください。

http://192.168.xx.xxx/project にアクセスするとプロファイリングが走ります。

その後、http://192.168.xx.xxx/xhprof_htmlにアクセスすると以下のような画面が表示されます。

XHProf  Hierarchical Profiler Report.png

リンクを踏むとプロファイリング結果が表示されます。

XHProf  Hierarchicat.png