Heim  >  Artikel  >  Backend-Entwicklung  >  Methode 1 zur Verwendung von XHProf zur Analyse von PHP-Leistungsengpässen

Methode 1 zur Verwendung von XHProf zur Analyse von PHP-Leistungsengpässen

不言
不言Original
2018-07-07 15:34:531346Durchsuche

xhprof-Erweiterung installieren

wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar zxf xhprof-0.9.4.tgz
cd xhprof-0.9.4/extension/
sudo phpize
./configure
sudo make
sudo make install
cd ../

php.ini konfigurieren

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp
Hinweis: xhprof wurde schon lange nicht mehr aktualisiert. PHP7 kann https verwenden ://github.com/phacility/….

Konfigurieren der xhprof-Umgebung

Sie müssen die beiden Verzeichnisse im xhprof-komprimierten Paket in das angegebene Verzeichnis kopieren (vorausgesetzt, sie sind als /work/xhprof/ definiert):

mkdir /work/xhprof/
cp -a xhprof_html/ /work/xhprof/
cp -a xhprof_lib/ /work/xhprof/

Dann wurde im Projekt-Framework die Eintragsdatei hinzugefügt:

xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
register_shutdown_function(function() {
    $xhprof_data = xhprof_disable();
    if (function_exists('fastcgi_finish_request')){
        fastcgi_finish_request();
    }
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default();
    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
});

Code-Analyse:
$xhprof_data zeichnet alle Funktionsaufrufzeiten und den CPU-Speicherverbrauch während der Programmausführung auf. Welche Indikatoren können insbesondere über die Parameter von xhprof_enable gesteuert werden? , derzeit unterstützt. Die Parameter sind:

  • HPROF_FLAGS_NO_BUILTINS Alle integrierten (internen) Funktionen überspringen.

  • XHPROF_FLAGS_CPU CPU-Daten zu den Ausgabeleistungsdaten hinzufügen.

  • XHPROF_FLAGS_MEMORY Speicherdaten zu den Ausgabeleistungsdaten hinzufügen. Die Verarbeitung nach

hat nichts mit der xhprof-Erweiterung zu tun. Sie besteht grob darin, eine Speicherklasse XHProfRuns_Default zu schreiben und $xhprof_data in einem Verzeichnis zu speichern 🎜> an Das Ergebnis wird in das aktuelle Verzeichnis ausgegeben. Wenn es nicht angegeben ist, wird das XHProfRuns_Default(__DIR__) in der php.ini-Konfigurationsdatei gelesen. Wenn es noch nicht angegeben ist, wird es an xhprof.output_dir ausgegeben. /tmp

und xhprof_enable erscheinen paarweise, eines steht am Anfang des laufenden Codes und das andere am Ende. In der Mitte befindet sich der zu analysierende Code. xhprof_disable

Wenn wir nach der obigen Konfiguration anschließend die Schnittstelle des Projekts anfordern, analysiert xhprof während des Anforderungsprozesses die CPU, den Speicher, den Zeitverbrauch usw. Protokolle werden im Verzeichnis

gespeichert. xhprof.output_dir

Web konfigurieren

Wie kann ich nach der Konfiguration das Protokoll überprüfen? Wir können einen einfachen Webserver erstellen:

xhprof.test.com.conf

server {
    listen       80;
    server_name  xhprof.test.com;

    root /work/xhprof/xhprof_html;
    index  index.html index.php;


    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
und dann den virtuellen Host xhprof.test.com konfigurieren. Starten Sie nginx neu und öffnen Sie xhprof.test.com, um den Effekt zu sehen:


Methode 1 zur Verwendung von XHProf zur Analyse von PHP-Leistungsengpässen

in der Standard-Benutzeroberfläche aufgeführt:

  • Funktionsname: Funktionsname

  • Anrufe: Anzahl der Anrufe

  • Inkl. Wandzeit (Mikrosekunden) : Funktionslaufzeit (inkl. Unterfunktionen)

  • IWall%: Funktionslaufzeit (inkl. Unterfunktionen) Anteil

  • Exkl Zeit (Mikrosekunden): Funktionslaufzeit (ohne Unterfunktionen)

  • EWall%: Funktionslaufzeit (ohne Unterfunktionen)

Sie können auch den Link [Vollständiges Callgraph anzeigen] im Internet sehen. Nach dem Klicken kann ein visuelles Leistungsanalysediagramm erstellt werden. Wenn nach dem Klicken ein Fehler gemeldet wird, liegt dies möglicherweise an einer fehlenden Abhängigkeit von graphviz. Graphviz ist ein Tool zum Zeichnen von Diagrammen, mit dem Sie Leistungsengpässe intuitiver erkennen können. Sie können es bei Bedarf installieren:

yum install -y libpng
yum install -y graphviz
Wirkung:


Methode 1 zur Verwendung von XHProf zur Analyse von PHP-Leistungsengpässen

Nicht-intrusive Einführung von xhprof

Zuvor haben wir die Analyse durch Hinzufügen von Code implementiert zur Projekteintragsdateifunktion. Eine elegantere Möglichkeit besteht darin, eine zusätzliche Datei xhprof.inc.php zu erstellen und im Verzeichnis

zu speichern: /work/xhprof/

xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
register_shutdown_function(function() {
    $xhprof_data = xhprof_disable();
    if (function_exists('fastcgi_finish_request')){
        fastcgi_finish_request();
    }
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default();
    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
});
Verwenden Sie die automatische Ladefunktion von PHP, um diese Datei einzufügen, bevor Sie den Code ausführen und php.ini bearbeiten :

auto_prepend_file = /work/xhprof/xhprof.inc.php
Dann starten Sie den PHP-Dienst neu. Dies wird für alle wirksam, die diese PHP-Umgebung verwenden.

Oder schreiben Sie es in die Nginx-Konfiguration des angegebenen Projekts:

jifen.cc.conf

location ~ \.php$ {
        
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "auto_prepend_file=/work/xhprof/xhprof.inc.php";
        include        fastcgi_params;
    }
Starten Sie dann den Nginx-Dienst neu. Dies gilt nur für dieses Projekt.

Dateien, die über auto_prepend_file und auto_append_file eingebunden werden, werden in diesem Modus geparst, mit einigen Einschränkungen, z. B. muss die Funktion vor dem Aufruf definiert werden.
Ändern Sie die Sampling-Frequenz

Standardmäßig wird xhprof jedes Mal ausgeführt. Wenn die Online-Umgebung so eingestellt ist, hat dies Auswirkungen auf die Leistung.

xhprof.inc.php

<?php $profiling = !(mt_rand()%9); 
if($profiling) xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
register_shutdown_function(function() use($profiling) {
    if($profiling){
        $xhprof_data = xhprof_disable();
        if (function_exists(&#39;fastcgi_finish_request&#39;)){
            fastcgi_finish_request();
        }
        include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";
        include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";
        $xhprof_runs = new XHProfRuns_Default();
        $xhprof_runs->save_run($xhprof_data, 'xhprof');    
    }
});
Zusammenfassung

In diesem Artikel haben wir vorgestellt, wie man die PHP-Leistung basierend auf der xhprof-Erweiterung analysiert, sie im Protokoll aufzeichnet und schließlich Verwenden Sie die mit der xhprof-Erweiterung gelieferte Benutzeroberfläche, die im Web angezeigt wird. Hauptwissenspunkte:

  • Xhprof-Erweiterung installieren

  • Xhprof in die Anwendung einfügen

  • Basierend auf nginx Analyseergebnisse anzeigen

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Lernen aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Hinweise zur PHP-FPM-Parameterkonfiguration für PHP7+

Lösen Sie das Problem, dass die Auswahl im Laravel-Administrator beim Bearbeiten des Formulars nicht automatisch den aktuellen Wert auswählen kann

Das obige ist der detaillierte Inhalt vonMethode 1 zur Verwendung von XHProf zur Analyse 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