PHP7環境でXHProf導入

PHP7環境でXHProf導入_f0364156_15311985.png
はじめまして。エンジニアの大木です。
今回はPHPの速度改善やボトルネック調査として比較的導入が容易なXHProfのセットアップ方法までをまとめました。

XHProfとは


XHProfはfacebookが開発したPHP用のプロファイラ
(今回の環境がphp7のためYaoguais/phpng-xhprofを利用させていただきました。)

セットアップ


環境

ubuntu16.04
php7.0.x(最新)

xhprofのインストール(php7対応)

$ git clone git@github.com:Yaoguais/phpng-xhprof.git ./xhprof
$ cd xhprof
$ phpize
$ ./configure
$ make clean && make && make test && sudo make install

/etc/php/7.0/fpm/conf.d/xhprof.ini
[xhprof]
extension = phpng_xhprof.so
xhprof.output_dir = /tmp/xhprof

/etc/php/7.0/cli/conf.dや/etc/php/7.0/fpm/conf.dからシンボリックリンクしてください。正しく拡張が読み込まれていればphpinfoでxhprofが記載されます。

xhprof付属の表示ツールのインストール

$ composer require facebook/xhprof dev-master

composerでインストールされたライブラリの構造上、ドキュメントルートから読み込こめるようにします。
$ ln -s vendor/facebook/xhprof/xhprof_lib/  public/xhprof_lib
$ ln -s vendor/facebook/xhprof/xhprof_html/ public/xhprof_html

必須ではありませんがコールグラフ生成にはgraphvizが必要です。
$ apt-get install graphviz

プロファイリング

計測

計測したい処理の開始部分と終了部分にコードを埋め込み
xhprof_enable(); //計測開始

//メイン処理

$xhprofData = xhprof_disable(); //計測終了
$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprofData,'myapp');

この時点で正しく動いていれば設定したxhprof.output_dirに結果が保存されます。

結果表示

ドキュメントルート配下に設置した/xhprof_html/にアクセスするとrunIDのリストが表示され、詳細画面ではプロファイリングの結果が表示されます。
今回はプロファイリング結果を元にしたボトルネック調査方法までは記載していませんが
実際のサービスで解析した結果ではループ処理内で不必要な関数呼び出しを最適化しただけで大幅なパフォーマンス改善ができました。

xhprofは拡張を導入しただけでは全体のシステムの実行時間に影響はおこらず、明示的に計測開始と終了を記述することで解析が行えます。そのため特定条件のみに解析、複数人利用している開発環境でも柔軟に解析が行えます。
是非、パフォーマンスチューニング時にはお試しください。


エンジニア募集

エキサイトではエンジニアとして一緒に働いてくださる方を新卒採用と中途採用で募集しています。詳しくは、こちらの採用情報ページをご覧ください。

by ex-engineer | 2016-08-26 12:00