Top View


Author shiro seike / せいけ しろう / 清家 史郎

tideways_xhprofを利用したPHPパフォーマンスプロファイリング

2018/10/31

PHP7.2インストール

とりあえずPHP7.2をインストール
利用OSはAmazon Linux2です。
phpizeが欲しいので、php-develをいれます

$ sudo yum update
$ sudo amazon-linux-extras install php7.2
$ sudo yum install php-devel

tideways_xhprofインストール

$ sudo yum install git
$ git clone https://github.com/tideways/php-xhprof-extension
$ cd php-xhprof-extension
$ phpize
$ ./configure
$ make
$ sudo make install

php.iniに設定

$ sudo vim /etc/php.ini

以下を追記

extension=tideways_xhprof.so

使い方

計測したい範囲で以下関数を呼び出します。

  • プロファイリング開始関数

    • tideways_xhprof_enable();
  • プロファイリング終了関数

    • tideways_xhprof_disable();

tideways_xhprof_disableに関してはスクリプト終了時とかに呼びたいので、
register_shutdown_functionとかに引っ掛けるのが良いんじゃないのかなと思います。

auto_prepend_fileとかに設定するのが便利何じゃないかと思います。

今回は手抜きします。

コード

<?php
function hoge($i)
{
    echo 'hoge' . $i;
}
function saveXhprofData()
{
    $savePath = uniqid() . 'seike460.xhprof';
    $data = tideways_xhprof_disable();
    file_put_contents($savePath, json_encode($data));
}
// プロファイリング開始
tideways_xhprof_enable();
// スクリプト終了時にデータ保存する関数
register_shutdown_function('saveXhprofData');

$i=1;
while ($i < 100) {
    hoge($i);
    $i++;
}

実行

$ php xhprof.php

実行するとファイルが作成されます。
今回の場合以下ファイル名でした。

5bd7e95b34f23.seike460.xhprof

このファイルを解析します。

解析ツール

xhprofが提供している公式の解析ツールがあるのですが、
諸々めんどくさいのでtidewaysが提供しているtoolkitを利用します。

Goなのでサクッと導入

$ sudo amazon-linux-extras install golang1.9
$ yum install golang
$ go get github.com/tideways/toolkit

パスも設定しておきます

$ vim ~/.bash_profile

以下を追記

PATH='~/go/bin':$PATH

あとは生成されたファイルを指定してあげれば結果が表示されます。

$ toolkit analyze-xhprof 5bd7e95b34f23.seike460.xhprof
 +----------+-------+-----------+------------------------------+
 | FUNCTION | COUNT | WALL-TIME | EXCL WALL-TIME (&amp;gt;= 0.01 MS) |
 +----------+-------+-----------+------------------------------+
 | hoge | 99 | 0.14 ms | 0.14 ms |
 | main() | 1 | 0.17 ms | 0.03 ms |
 +----------+-------+-----------+------------------------------+

可視化

公式xhprofの頃もあったのですがgraphvizを利用すればいい感じに描画してくれます。

$ sudo yum install graphviz

これもtoolkit経由で実行

$ toolkit generate-xhprof-graphviz 5bd7e95b34f23.seike460.xhprof
$ dot -Tpng callgraph.dot > callgraph.png

これでPHPの関数に関して、何が悪いのかしっかり計測して評価していけますね!

shiro seike / せいけ しろう / 清家 史郎

shiro seike / せいけ しろう / 清家 史郎

Twitter X

Company:Fusic CO., LTD. Slides:slide.seike460.com blog:blog.seike460.com Program Language:PHP , Go Interest:Full Serverless Architecture

Related Posts