Heim >Backend-Entwicklung >PHP7 >Wie teste ich mit xhprof die PHP-Leistung in PHP7? (Methodeneinführung)

Wie teste ich mit xhprof die PHP-Leistung in PHP7? (Methodeneinführung)

青灯夜游
青灯夜游nach vorne
2020-07-15 17:11:474780Durchsuche

Wie teste ich mit xhprof die PHP-Leistung in PHP7? (Methodeneinführung)

Einführung

1 Hintergrund

  • PHPs xhprof-Erweiterung Facebook wird nicht mehr aktualisiert und gewartet, da Facebook HHVM vollständig genutzt hat und die PHP-Zend-Engine nicht mehr verwendet.

  • xhprof unterstützt nicht die neue Version von PHP (PHP7). Die Tideways-Erweiterung ist aus dem xhprof-Projekt abgezweigt und wird derzeit weiterhin unterstützt. 5.6 und 5.5.

  • tideways ist ein Open-Source-Projekt, das nur UI-Dienste in Rechnung stellt. Tatsächlich kann xhgui unseren täglichen Bedarf vollständig decken

2 Funktionen

Tideways ist eine Erweiterung zum Testen der PHP-Leistung. Sie kann die während des gesamten Prozesses der PHP-Ausführung aufgerufenen Funktionen, die Anzahl der Funktionsaufrufe und die Ausführungszeit ermitteln , CPU-Zeit und Speichernutzung, Speicherspitze, Gesamtausführungszeit, Gesamt-CPU-Zeit, Gesamtspeichernutzung, Gesamtspeicherspitze und andere Daten. Analysieren Sie die oben genannten Daten, um den Leistungsengpass von PHP herauszufinden, und analysieren Sie den PHP-Ausführungsprozess. usw.

3 Vorteile

  • tideways ist eine PHP-Erweiterung, die in Kombination mit xhgui nicht vergraben werden muss Der PHP-Code Der Überwachungscode

  • kann die Ausführungshäufigkeit festlegen (z. B. 1/100), ohne für jede Anfrage Ausführungsprotokolle zu generieren, was zu Leistungsverlusten führt um Ausführungsprotokolle zu generieren, indem Parameter zur Steuerung angefordert werden (debug=1)

  • Es gibt eine einfache und direkte Benutzeroberfläche zum Transformieren von Daten

  • Das können Sie Passen Sie die Bedingungen für die Datenfilterung frei an. Analysieren Sie beispielsweise eine bestimmte Schnittstelle, analysieren Sie die Schnittstellenanforderungssituation in einem bestimmten Zeitraum usw.

4 Nachteile

Obwohl nicht aufdringlich, wenn für jede Schnittstelle Ausführungsprotokolle generiert werden, ist der Verbrauch von CPU und Speicher nicht zu vernachlässigen.

5 Implementierungsprinzip

  • Tideways-Erweiterung ist für die Generierung laufender Protokolle verantwortlich
  • In Nginx fastcgi_param PHP_VALUE auto_prepend_file Wird konfiguriert, führen Sie die mit auto_prepend_file konfigurierte PHP-Datei aus, bevor die Anforderung gestartet wird. Am Ende des PHP-Prozesses wird Tideways_disable aufgerufen, um die Einbettung von Tideways zu realisieren oder MySQL oder eine Datei und wird nach der Analyse durch xhgui angezeigt. Zu den Anzeigeformaten gehören Balkendiagramm, Wasserfallfluss und Flammendiagramm.

Anwendung

Die folgenden zwei Anwendungsmethoden werden vorgestellt: Intrusiv und Nicht-invasiv

Der aufdringliche Modus bezieht sich auf das Hinzufügen von Code zum Code, und der aufdringliche Modus verwendet die Standard-Benutzeroberfläche.

Der nicht aufdringliche Modus bezieht sich darauf, keine Änderungen am Code vorzunehmen /apache zur nichtinvasiven Implementierung von Code-Injection;

Installieren Sie tideways_xhprof

git clone "https://github.com/tideways/php-xhprof-extension.git"
cd php-xhprof-extension
phpize
./configure --with-php-config=/usr/local/php7/bin/php-config
make
sudo make install

Fügen Sie die Erweiterung=tideways_xhprof.so

Nicht aufdringlich:

<?php
tideways_xhprof_enable();

// your application code

$data = tideways_xhprof_disable();
file_put_contents(
    sys_get_temp_dir() . "/" . uniqid() . ".yourapp.xhprof",
    serialize($data)
);

  // $data = tideways_xhprof_disable();
  // file_put_contents(
  //     sys_get_temp_dir() . "/" . date(&#39;His&#39;, time()) . ".material.xhprof",
  //     serialize($data)
  // );

Die hier generierte .xhprof-Datei befindet sich im tmp-Verzeichnis

Installieren Sie die Standard-Benutzeroberfläche zum Suchen von Daten

git clone git@github.com:phacility/xhprof.git

Installieren Sie die Verzeichnisse

und xhprof_lib aus diesem Repository in Ihrem Webordner und Navigieren Sie zu xhprof_html, um die Liste der Spuren anzuzeigen. xhprof_html/index.php

Wenn Sie Funktionsaufrufnotizen sehen möchten, müssen Sie Callgraph installieren

Callgraph installieren

Callgraph ist eigentlich ein Kombination aus drei Werkzeugen werden.

Eine davon ist cflow oder calltree, die zum Generieren eines C-Funktionsaufrufbaums verwendet wird. Im Folgenden wird hauptsächlich cflow vorgestellt.

Ein Tool zum Arbeiten mit der Punkttext-Grafiksprache, erweitert durch graphviz.

Ein Skript zum Konvertieren des C-Funktionsaufrufbaums in das Punktformat: tree2dotx

Nehmen Sie Ubuntu als Beispiel und installieren Sie sie entsprechend:

sudo apt-get install cflow graphviz

Als nächstes installieren Sie tree2dotx und Callgraph, hier sind sie werden standardmäßig nach /usr/local/bin installiert.

wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx
wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph
sudo cp tree2dotx callgraph /usr/local/bin
sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}

Die folgenden zwei Darstellungen werden angezeigt:

> Aufdringliche Verwendung von xhgui erfordert mongodb

Installieren Sie xhgui

git clone git@github.com:perftools/xhgui.git

Nginx konfigurieren

server {
  listen 80;
  server_name site.localhost;
  root /Users/markstory/Sites/awesome-thing/app/webroot/;
  fastcgi_param PHP_VALUE "auto_prepend_file=/home/www/xhgui/external/header.php";  #这里依据个人目录而配
}
Das bedeutet hier, header.php auszuführen, bevor der Projekt-PHP-Code ausgeführt wird, also z um den Zweck einer nicht-invasiven Erkennungsleistung zu erreichen

xhgui-Konfiguration (Häufigkeit der Protokollgenerierung)

In xhguis config/config.default. php, die Anzahl der Sampling-Hits kann eingestellt werden;

return rand(1, 100) === 42; 为1%的采样率,改成return True;则标识每次都采样

&#39;profiler.enable&#39; => function() {
   // url 中包含debug=1则百分百捕获
   if(!empty($_GET['debug'])){
       return True;
   }else{
       // 1%采样
       return rand(1, 100) === 42;
   }
}

mongodb的配置

   xhgui/config/config.default.php

// Can be either mongodb or file.
   /*
   'save.handler' => 'file',
   'save.handler.filename' => dirname(__DIR__) . '/cache/' . 'xhgui.data.' . microtime(true) . '_' . substr(md5($url), 0, 6),
   */
   'save.handler' => 'mongodb',
   // Needed for file save handler. Beware of file locking. You can adujst this file path
   // to reduce locking problems (eg uniqid, time ...)
   //'save.handler.filename' => __DIR__.'/../data/xhgui_'.date('Ymd').'.dat',
   'db.host' => 'mongodb://127.0.0.1:27017',
   'db.db' => 'xhprof',

mongo服务器的配置

mongo
 > use xhprof
 > db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
 > db.results.ensureIndex( { 'profile.main().wt' : -1 } )
 > db.results.ensureIndex( { 'profile.main().mu' : -1 } )
 > db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
 > db.results.ensureIndex( { 'meta.url' : 1 } )

最后展示几张xhgui的效果图

 

 

 

 相关学习推荐:PHP编程从入门到精通

Das obige ist der detaillierte Inhalt vonWie teste ich mit xhprof die PHP-Leistung in PHP7? (Methodeneinführung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen