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('min'=>1, 'max'=>10, 'chance'=>30),//金额:分 概率:百分之(默认为100%,不足100%按第一档计算) array('min'=>11, 'max'=>25, 'chance'=>60), array('min'=>26, 'max'=>50, 'chance'=>10), array('min'=>50, 'max'=>80, 'chance'=>0), array('min'=>80, 'max'=>100, 'chance'=>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['chance']>0) { $chance += $v['chance']*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]['min']*10000, $rules[$index]['max']*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.
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!