PHPプロファイリング

PHPプロファイリング



遅かれ早かれ、私たちはそれぞれレガシーコードとその最適化に直面します。 このような状況でのデバッガーとプロファイラーは、プログラマーにとって最高のアシスタントです。 Derick Rethans(Derick Rethans)のおかげでPHPを使用する人には、xDebugという優れたツールがあります。 RuNetにもxDebugに関する多くの情報があるので、この記事の議論は彼に関するものではありません。



PHPのプロファイラーの言及につまずいたので、すぐにxDebugについて考えました(Zendのプロプライエタリツールを長い間忘れていました)が、今回は間違っていました-XHProfについてお話します。

XHProf



このプロファイラーはFacebook用に特別に開発され、そのソースコードは2009年3月に公開されました。



インストールは迅速かつスムーズでした。

wget pecl.php.net/get/xhprof-0.9.2.tgz

tar xvf xhprof-0.9.2.tgz

cd xhprof-0.9.2/extension/

phpize

./configure && make && make install

cd /usr/local/etc/php.d/

vim xhprof.ini

cd /usr/local/

vim header.php

vim footer.php

vim etc/php.ini

/etc/init.d/php-fpm restart

cp vhost.conf.template prof.my.conf

sed -is/site/prof/ prof.my.conf

vim prof.my.conf

/etc/init.d/nginx restart








上記の設定を分析しましょう



xhprof.ini

[xhprof]

extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so

xhprof.output_dir="/home/max/www/profile/"








php.iniに2行追加しましたが、その説明は以下で説明します

auto_prepend_file = /usr/local/header.php

auto_append_file = /usr/local/footer.php








prof.my.conf-Nginx構成が最も標準です。



server {

listen 80;

server_name prof.my;

charset utf8;



root /usr/local/src/xhprof-0.9.2/xhprof_html ;

location / {

index index.php;

}



location ~ \.php$ {

fastcgi_pass 127.0.0.1:12000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /usr/local/src/xhprof-0.9.2/xhprof_html/$fastcgi_script_name;

include fastcgi_params;



}

}









/usr/local/src/xhprof-0.9.2/xhprof_htmlには、プロファイラーに対して適切なWEBGUIを作成するPHPソースがあります。



したがって、2つのメインファイルについて:



header.php

<?php

if(isset($_COOKIE['xhprof'])){



if (extension_loaded('xhprof')) {

include_once '/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_lib.php';

include_once '/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_runs.php';

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

}

}








footer.php

<?php

if(isset($_COOKIE['xhprof'])){

if (extension_loaded('xhprof')) {

$profiler_namespace = 'myapp'; // namespace for your application

$xhprof_data = xhprof_disable();

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);



// url to the XHProf UI libraries (change the host name and path)

$profiler_url = sprintf('http://prof.my/index.php?run=%s&source=%s', $run_id, $profiler_namespace);

echo <<<OUT

Profiler output

OUT;

}

}








ここで、Web経由でPHPスクリプトを起動し、左上隅にプロファイラー出力へのリンクを確認します-これがprof.myホストの作成目的です



注意してください-私はCOOKIE検証を使用しています! このチェックにより、プロダクションサーバーでプロファイラーを安全に使用できます(実際のデータと実際の負荷)。



プロファイラーのWebインターフェースには、各機能に関する情報が記載されたプレートが表示され、次の情報が報告されます。





パラメータのいずれかでテーブルをソートすることが可能です



各機能に関する情報は、InclusiveとExclusiveの2つのタイプに分けられます。 Inclusiveには、子呼び出しで使用される番号が含まれますが、Exclusiveには含まれません。 また、関数の名前をクリックすると、その関数と、それが呼び出された関数と呼び出された関数に関する情報のみを表示する可能性もあります。



GraphVizがシステムにインストールされている場合、プロファイラーは呼び出しグラフを描画します。



PS伝統を破ることなく:これはハブに関する私の最初の投稿です



UPD:PHPに再投稿されました。



All Articles