Heim >Backend-Entwicklung >PHP-Tutorial >Beispielerklärung für die Verwendung von XHProf zum Auffinden von PHP-Leistungsengpässen

Beispielerklärung für die Verwendung von XHProf zum Auffinden von PHP-Leistungsengpässen

jacklove
jackloveOriginal
2018-07-05 18:01:072151Durchsuche

Der unten stehende Herausgeber wird Ihnen ein Beispiel für die Verwendung von XHProf zum Auffinden von PHP-Leistungsengpässen vorstellen. Es hat einen guten Referenzwert und ich hoffe, dass es für alle hilfreich sein wird. Folgen wir dem Herausgeber, um einen Blick darauf zu werfen

1. Xhprof-Erweiterung installieren

//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. Ändern Sie die php.ini

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp

Konfiguration xhprof.output_dir gibt den Speicherort der generierten Profildatei an, wir geben ihn als /tmp an .

3. Verschieben Sie zugehörige Dateien in das Projekt

//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/

Konfigurieren Sie einen Domänennamen und Durchsuchen Der Server kann auf http://will.com/xhprof/xhprof_html/index.php zugreifen

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;
 }
 }

Graphivz installieren

//需要安装graphviz否则查看性能图片时候会报failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '
yum -y install graphviz

5. Testdateien schreiben

//入口文件的开始位置
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");

Vollständiges Codebeispiel (zufällige Demo mit rotem Umschlag)

<?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,最后我们输出了一个链接地址,使用改地址就可以看到本次请求的分析结果。

Analyseergebnisse anzeigen

Führen Sie zuerst den Geschäftscode aus

Dann öffnet sich der Browser http://will.com/xhprof/xhprof_html/index.php, klicken Sie zum letzten Mal, um den zu generieren xhprof-Datei

Beachten Sie den Link <span style="font-family:NSimsun">Vollständiges Callgraph anzeigen<code><span style="font-family:NSimsun">View Full Callgraph</span> im Mitte, über diesen Link können wir die grafischen Analyseergebnisse sehen

Der rote Teil im Bild ist der Teil mit geringerer Leistung und längerem Zeitverbrauch, den wir verwenden können die entsprechend rot markiert ist, um den Systemcode zu optimieren

Außerdem bedeutet das xhprof-Berichtsfeld:

Funktionsname: Methodenname.

Aufrufe: Die Häufigkeit, mit der die Methode aufgerufen wurde.

Aufrufe %: Die Anzahl der Methodenaufrufe als Prozentsatz der Gesamtzahl der Methodenaufrufe auf derselben Ebene.

Incl.Wall Time (Mikrosekunden): Die Zeit, die für die Methodenausführung benötigt wird, einschließlich der Ausführungszeit von Untermethoden. (Einheit: Mikrosekunden)

IWall%: Der Prozentsatz der für die Methodenausführung aufgewendeten Zeit.

Exkl. Wall Time (Mikrosekunden): Die Zeit, die zum Ausführen der Methode selbst benötigt wird, ohne die Ausführungszeit von Untermethoden. (Einheit: Mikrosekunden)

EWall%: Der Prozentsatz der Zeit, die für die Ausführung der Methode selbst aufgewendet wurde.

Inkl. CPU (Mikrosekunden): CPU-Zeit, die für die Methodenausführung aufgewendet wird, einschließlich der Ausführungszeit von Untermethoden. (Einheit: Mikrosekunden)

ICpu%: Der Prozentsatz der CPU-Zeit, die für die Methodenausführung aufgewendet wird.

Exkl. CPU (Mikrosekunden): Die CPU-Zeit, die für die Ausführung der Methode selbst aufgewendet wurde, ohne die Ausführungszeit von Untermethoden. (Einheit: Mikrosekunden)

ECPU%: Der Prozentsatz der CPU-Zeit, die für die Ausführung der Methode selbst aufgewendet wurde.

Incl.MemUse(bytes): Der von der Methodenausführung belegte Speicher, einschließlich des von der Untermethodenausführung belegten Speichers. (Einheit: Bytes)

IMemUse%: Der Prozentsatz des durch die Methodenausführung belegten Speichers.

Excl.MemUse(bytes): Der von der Ausführung der Methode selbst belegte Speicher, ausgenommen der von der Ausführung von Untermethoden belegte Speicher. (Einheit: Bytes)

EMemUse%: Der Prozentsatz des Speichers, der durch die Ausführung der Methode selbst belegt wird.

Incl.PeakMemUse(bytes): Incl.MemUse-Spitzenwert. (Einheit: Bytes)

IPeakMemUse%: Incl.MemUse-Spitzenprozentsatz.

Excl.PeakMemUse(bytes): Excl.MemUse-Spitzenwert. Einheit: (Byte)

EPeakMemUse%: Excl.MemUse-Spitzenprozentsatz.

Das obige Beispiel für die Verwendung von XHProf zum Auffinden von PHP-Leistungsengpässen ist der gesamte vom Herausgeber geteilte Inhalt. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie die chinesische PHP-Website unterstützen.

Artikel, die Sie interessieren könnten:

Verwandte Zusammenfassung benutzerdefinierter Vorlagendirektiven im Laravel-Framework

Ein Beispiel für die rekursive Implementierung einer schnellen Sortierung mit PHP

Ein detailliertes Tutorial für die Implementierung der Git-Bereitstellung mit PHP

Das obige ist der detaillierte Inhalt vonBeispielerklärung für die Verwendung von XHProf zum Auffinden von PHP-Leistungsengpässen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn