5 Stimmen

Wie kann man langsame PHP-Prozesse überwachen?

Ich verwende PHP-FPM mit Nginx. Ich habe eine Vielzahl verschiedener Skripte auf meinen Servern. Manchmal gibt es ein Problem mit PHP-Codes und der Prozess dauert zu lange. Dies verbraucht alle verfügbaren PHP-FPM-Kinder und behindert somit andere PHP-Skripte.

Wie kann ich das PHP-FPM-Protokoll so einstellen, dass es langsame php-Prozesse aufzeichnet, so wie wir langsame mysql-Abfragen überwachen, um festzustellen, welches Skript das Problem verursacht?

7voto

khizar ansari Punkte 1396

Php-fpm unterstützt langsame Logging-Funktion des php-Skripts

in Ihrer php-fpm.conf müssen Sie 2 Variablen hinzufügen

request_slowlog_timeout und slowlog

laut php-fpm wiki

Die Zeitüberschreitung für die Bearbeitung einer einzelnen Anfrage, nach der ein PHP-Backtrace erstellt wird ; in die Datei 'slowlog' geschrieben wird. Ein Wert von '0s' bedeutet 'aus'. Verfügbare Einheiten: s(econds)(Standard), m(inutes), h(ours), oder d(ays) ; Standardwert: 0

request_slowlog_timeout = 30

; Die Protokolldatei für langsame Anfragen ; Standardwert: nicht gesetzt Hinweis: slowlog ist obligatorisch, wenn request_slowlog_timeout gesetzt ist

slowlog = log/$pool.log.slow

zur Überwachung von Mysql-Abfragen verwende ich diese Abfrage, um die Liste der Abfragen zu erhalten, die auf meinem Rechner ausgeführt werden

show full processlist;

4voto

Sergio Tulentsev Punkte 218286

Dies ist das zweite Mal heute, dass ich eine Empfehlung aussprechen kann. RPM

Dies ist ein Tool zur Überwachung der Anwendungsleistung. Ursprünglich war es eine Killer-App für Rails, aber später begannen sie, PHP zu unterstützen.

Es kann Ihre Skripte überwachen, langsame Skripte verfolgen und alle Arten von Diagrammen anzeigen.

Es kümmert sich auch um langsames SQL (und Sie können sogar Erklärungspläne innerhalb des Tools sehen!)

Sie sollten sich das unbedingt ansehen.

3voto

symcbean Punkte 46489

Wie kann ich das PHP-FPM-Protokoll einstellen?

Nein. Verwenden Sie die nginx log_format um die Dauer jeder HTTP-Anfrage mit Millisekundengenauigkeit aufzuzeichnen.

wie wir langsame mysql-Abfragen überwachen

Sie entfernen also bereits buchstabengetreue Werte und setzen Prioritäten auf der Grundlage des Produkts aus Häufigkeit und verstrichener Zeit?

1voto

stefgosselin Punkte 8802

Ich habe mit diese Klasse meine eigenen Utility-Skripte zu profilieren und zu überwachen. Das funktioniert gut, wenn man nichts gegen Birnenklassen hat.

Sie können im Code verschiedene Zeitgeber einstellen und auf die Werte reagieren, die diese Zeitgeber zurückgeben. Als Bonus können Sie eine Text- oder HTML-Profiling-Ausgabe darüber erhalten, wie lange die einzelnen Timer für ihre Ausführung benötigen.

Weitere Informationen finden Sie in den Dokumentationen .

Ich hoffe, das hilft, viel Glück.

1voto

fotuzlab Punkte 1426

Appgati könnte hier eine Hilfe sein.

Es ist keine endgültige Lösung für Ihr Problem, kann aber nützliche Erkenntnisse darüber liefern, wo die Verzögerung entstanden ist. Möglicherweise haben Sie Datenverluste oder verlieren Zeit bei der Erstellung des DOM. Dieses Skript gibt einen Überblick über mögliche Problembereiche, die dann gezielt angegangen werden können.

Es kann auch nützlich sein, um die Leistung einer bestimmten Funktion in einem Skript zu ermitteln.

Beispielhafte Ausgabe:

Array
(
[Clock time in seconds] => 1.9502429962158
[Time taken in User Mode in seconds] => 0.632039
[Time taken in System Mode in seconds] => 0.024001
[Total time taken in Kernel in seconds] => 0.65604
[Memory limit in MB] => 128
[Memory usage in MB] => 18.237907409668
[Peak memory usage in MB] => 19.579357147217
[Average server load in last minute] => 0.47
[Maximum resident shared size in KB] => 44900
[Integral shared memory size] => 0
[Integral unshared data size] => 0
[Integral unshared stack size] => 
[Number of page reclaims] => 12102
[Number of page faults] => 6
[Number of block input operations] => 192
[Number of block output operations] => 
[Number of messages sent] => 0
[Number of messages received] => 0
[Number of signals received] => 0
[Number of voluntary context switches] => 606
[Number of involuntary context switches] => 99

)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X