XHProf を使用して PHP パフォーマンスのボトルネックを見つける例の説明

jacklove
リリース: 2023-04-02 15:56:02
オリジナル
2138 人が閲覧しました

以下のエディターでは、XHProf を使用して PHP のパフォーマンスのボトルネックを見つける例を紹介します。これは優れた参考値であり、皆さんの役に立つことを願っています。エディターをフォローして見てみましょう。

XHProf は、PHP パフォーマンスをテストするために Facebook によって開発された拡張機能です。この記事では、XHProf を使用して PHP パフォーマンスを最適化し、PHP アプリケーションのパフォーマンスのボトルネックを見つける方法を記録します。

1. Xhprof 拡張機能をインストールします

//github上下载https://github.com/facebook/xhprof
unzip xhprof-master.zip 
cd xhprof-master/extension/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-xhprof
make && make install
ログイン後にコピー

2。 php.ini

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp
ログイン後にコピー

設定の xhprof.output_dir を変更して、生成されたプロファイル ファイルが保存される場所を指定します。 /tmp となります。

3. 関連ファイルをプロジェクトに移動します

//xhprof下载压缩包中的xhprof_html和xhprof_lib
cp -r xhprof-master/xhprof_html /usr/local/nginx/html/xhprof/
cp -r xhprof-master/xhprof_lib /usr/local/nginx/html/xhprof/
ログイン後にコピー

ドメイン名の設定サーバーは http://will.com/xhprof/xhprof_html/index.php

server{
 listen 80;
 server_name will.com;
 location / {
  root /usr/local/nginx/html;
  index index.html;
 }
 location ~ \.php$ {
  root html;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include  fastcgi_params;
 }
 }
ログイン後にコピー

## にアクセスできます。 4.graphivz# をインストールします。

##
//需要安装graphviz否则查看性能图片时候会报failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '
yum -y install graphviz
ログイン後にコピー

5. テスト ファイルを作成します

//入口文件的开始位置
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);

业务逻辑...

//业务逻辑结束后
$xhprof_data = xhprof_disable();
include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_lib.php"; 
include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_runs.php"; 
$objXhprofRun = new XHProfRuns_Default();//数据会保存在php.ini中xhprof.output_dir设置的目录去中 
$run_id = $objXhprofRun->save_run($xhprof_data, "test");
ログイン後にコピー

完全なコード例 (ランダムな赤い封筒のデモ)

<?php
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
function show($info)
{
 echo "<pre class="brush:php;toolbar:false">";
 print_r($info);
}

//不作数据校验
$rules = array(
 2=>array(&#39;min&#39;=>1, &#39;max&#39;=>10, &#39;chance&#39;=>30),//金额:分 概率:百分之(默认为100%,不足100%按第一档计算)
 array(&#39;min&#39;=>11, &#39;max&#39;=>25, &#39;chance&#39;=>60),
 array(&#39;min&#39;=>26, &#39;max&#39;=>50, &#39;chance&#39;=>10),
 array(&#39;min&#39;=>50, &#39;max&#39;=>80, &#39;chance&#39;=>0),
 array(&#39;min&#39;=>80, &#39;max&#39;=>100, &#39;chance&#39;=>0),
);
$total_money = 10000;//红包总金额
$res = array();
while($total_money>0)
{
 $index = getLevel($rules);
 $money = setMoney($rules, $index);
 if ($money > $total_money)//金额不足
 {
 $money = $total_money;
 $total_money = 0;
 } else {
 $total_money -= $money;
 }
 $res[] = ($index+1)."---".$money;
}
echo show($res);
echo $total_money . "<br/>";
//1.先确定档次
function getLevel($rules)
{
 $level = array();
 $chance = 0;
 foreach($rules as $k=>$v)
 {
 if ($v[&#39;chance&#39;]>0)
 {
  $chance += $v[&#39;chance&#39;]*100;//扩大100倍
  $level[$k] = $chance;
 }
 }
 $index = 0;
 $rand_num = mt_rand(1, 10000);
 foreach($level as $k=>$v)
 {
 if ($rand_num <= $v)
 {
  $index = $k;
  break;
 }
 }
 return $index;
}
//2.确定档次之后,再确定金额
function setMoney($rules, $index)
{
 $money = mt_rand($rules[$index][&#39;min&#39;]*10000, $rules[$index][&#39;max&#39;]*10000)/10000;
 $money = ceil($money);
 $money > 1 && $money = $money -1;//防止出现免单情况
 return $money;
}
$xhprof_data = xhprof_disable();
include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_lib.php"; 
include_once "/usr/local/nginx/html/xhprof/xhprof_lib/utils/xhprof_runs.php"; 
$objXhprofRun = new XHProfRuns_Default();//数据会保存在php.ini中xhprof.output_dir设置的目录去中 
$run_id = $objXhprofRun->save_run($xhprof_data, "test");
echo "http://will.com/xhprof/xhprof_html/index.php?run=$run_id&source=test";//变量$runId是本次请求生成分析结果的id,最后我们输出了一个链接地址,使用改地址就可以看到本次请求的分析结果。
ログイン後にコピー

6. 分析結果の表示最初にビジネス コードを実行します;

次にブラウザが http://will.com/xhprof/xhprof_html/index.php を開き、最後にクリックしてxhprof ファイル

中央にある

View Full Callgraph<span style="font-family:NSimsun"> リンクに注目してください。これを通じて、グラフィカルな分析を確認できます。結果</span>

図の赤い部分は、パフォーマンスが比較的低く、消費時間が長い部分です。どの関数がマークされているかに応じて、システム コードを最適化できます。

さらに、xhprof レポート フィールドの意味: 関数名: メソッド名。

Calls: メソッドが呼び出された回数。

Calls%: 同じレベルのメソッド呼び出しの合計数に対するメソッド呼び出しの数の割合。

Incl.Wall Time(microsec): サブメソッドの実行時間を含む、メソッドの実行にかかる時間。 (単位: マイクロ秒)

IWall%: メソッドの実行に費やされた時間の割合。

Excl. Wall Time (microsec): サブメソッドの実行時間を除く、メソッド自体の実行にかかる時間。 (単位: マイクロ秒)

EWall%: メソッド自体の実行に費やした時間の割合。

CPU を含む (マイクロ秒): サブメソッドの実行時間を含む、メソッドの実行に費やされた CPU 時間。 (単位: マイクロ秒)

ICpu%: メソッドの実行に費やされた CPU 時間の割合。

Excl. CPU (microsec): サブメソッドの実行時間を除く、メソッド自体の実行に費やされた CPU 時間。 (単位: マイクロ秒)

ECPU%: メソッド自体の実行に費やされた CPU 時間の割合。

Incl.MemUse(bytes): メソッドの実行によって占有されるメモリ (サブメソッドの実行によって占有されるメモリを含む)。 (単位: バイト)

IMemUse%: メソッドの実行によって占有されているメモリの割合。

Excl.MemUse(bytes): サブメソッドの実行によって占有されるメモリを除く、メソッド自体の実行によって占有されるメモリ。 (単位: バイト)

EMemUse%: メソッド自体が占有するメモリの割合。

Incl.PeakMemUse(バイト): Incl.MemUse ピーク値。 (単位: バイト)

IPeakMemUse%:MemUse のピークの割合を含みます。

Excl.PeakMemUse(バイト): Excl.MemUse のピーク値。単位: (バイト)

EPeakMemUse%: Excl.MemUse ピークの割合。

XHProf を使用して PHP パフォーマンスのボトルネックを見つける上記の例は、エディターによって共有されたすべてのコンテンツです。参考になれば幸いです。また、PHP 中国語 Web サイトをサポートしていただければ幸いです。

興味があるかもしれない記事:

Laravel フレームワークのカスタム テンプレート ディレクティブの関連概要


クイックソートメソッドのPHP再帰実装例説明


gitデプロイメントメソッドのPHP実装の詳細説明チュートリアル


以上がXHProf を使用して PHP パフォーマンスのボトルネックを見つける例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート