Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie XHProf, um Instanzen von PHP-Leistungsengpässen zu finden. PHP-Instanzen

Verwenden Sie XHProf, um Instanzen von PHP-Leistungsengpässen zu finden. PHP-Instanzen

韦小宝
韦小宝Original
2017-12-15 09:47:031109Durchsuche

Der Redakteur unten zeigt Ihnen ein Beispiel für die Verwendung von XHProf, um PHP-Leistungsengpässe zu finden. XHProf ist eine von Facebook entwickelte Erweiterung, um die Leistung von PHP zu testen Engpässe in PHP Verwenden Sie XHProf zur Leistungsoptimierung PHP in der Anwendung, um Leistungsengpässe zu finden. Es hat einen sehr guten Referenzwert und ich hoffe, dass es für alle hilfreich sein wird. Kommen Sie vorbei und werfen Sie einen Blick mit der Redaktion!

1. Installieren Sie die Xhprof-Erweiterung


//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 php.ini


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


Konfigurieren von xhprof.output_dir Gibt den Speicherort an, an dem die generierte Profildatei gespeichert wird. Wir geben ihn als /tmp an.

3. Verschieben Sie die zugehörigen 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 der Browser 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;
 }
 }


4. Installieren Sie graphivz


//需要安装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");


Komplettcode Beispiel (Demo eines zufälligen roten Umschlags)


<?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. Überprüfen Sie die Analyseergebnisse

Führen Sie zuerst den Geschäftscode aus;

Dann öffnet der Browser http://will.com/xhprof/xhprof_html/index.php, klicken Sie das letzte Mal, um die xhprof-Datei zu generieren

Beachten Sie den Link <span style="font-family:NSimsun">Vollständiges Callgraph anzeigen<code><span style="font-family:NSimsun">View Full Callgraph</span> in der Mitte was wir als grafische Analyseergebnisse sehen können

Der rote Teil im Bild ist der Teil mit geringerer Leistung und längerem Zeitverbrauch. Wir können bestimmen, welche Funktionen markiert sind rot Optimieren Sie den Systemcode

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, er kann Ihnen eine Referenz geben! !

Verwandte Empfehlungen:

Verwenden Sie XHProf, um Fälle von PHP-Leistungsengpässen zu finden

So integrieren Sie Snappy in xhprof in PHP

Bild- und Textcode-Tutorial zur Installation und Verwendung des xhprof-Leistungsanalysetools unter PHP7

Das obige ist der detaillierte Inhalt vonVerwenden Sie XHProf, um Instanzen von PHP-Leistungsengpässen zu finden. PHP-Instanzen. 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