Begeisterter Entwickler: Redis-Cache für die gesamte Konfiguration, Latenz der Startseite um dreißig Prozent reduziert. Der Zahlungstunnel bleibt bei vier Sekunden. Niemand hat den Zahlungstunnel profiliert – die Zeit lebt in siebenundvierzig SQL-Abfragen, die von einem schlecht benannten Laravel-Accessor ausgelöst werden. Redis machte das, was ohnehin schon schnell war, noch schneller.
Das Erstellen eines PHP-Profils ist kein Schritt, bei dem Sie Zeit haben. Es ist die Gegendebatte zwischen Intuition und Messung. Ohne einen flammenden Graphen schreiben Sie Code neu; Damit greifen Sie die fünf Prozent des Anrufdiagramms an, die achtzig Prozent der Zeit kosten.
Tools nach Kontext
| Werkzeug | Umwelt | Überlastung |
|---|---|---|
| Blackfire / Tideways | Vorproduktion + Musterproduktion | Niedrig |
| SPX | Entwicklung/Vorproduktion, Produktion möglich | Sehr niedrig |
| Xdebug-Trace | Nur Entwicklung/Vorproduktion | Hoch |
| PHP-FPM-Slowlog | Produktion | Minimal |
| APM-Überwachung (Datadog, Sentry) | Produktion | Variiert |
Empfohlener Arbeitsablauf:
- Die Überwachung identifiziert den langsamen Weg beim 95. Perzentil.
- Blackfire- oder SPX-Profile dieser URL unter simulierter Last.
- Korrektur (SQL, Cache, Algorithmus).
- Neuprofilierung – verschlüsselter Gewinnnachweis.
Erstellen Sie kein Profil für die Startseite, wenn im Ticket „CSV-Administrator bei Zeitüberschreitung exportieren“ erwähnt wird.
Lesen Sie die Ergebnisse, ohne sich zu verlaufen
Gemeinsame Signale:
| Dominante Funktion | Aktion |
|---|---|
PDOStatement->execute | EXPLAIN, indizieren, ORM vorladen |
curl_exec | Timeout, Cache, asynchrone Verarbeitung |
file_get_contents | Lokale E/A, Streams, Objektspeicher |
unserialize / großer json_decode | Nutzlastformat, Cache |
massives preg_match | Regex-Refactoring oder Parsing |
Integration in Continuous Integration und Pre-Production
- Blackfire-Vergleiche bei Pull-Requests, sofern das Budget dies zulässt.
- Regressionsschwelle: plus zehn Prozent Wandzeit blockiert den Zusammenschluss (kritische Strecken).
- Anonymisierter Datensatz kurz vor der obligatorischen Produktion – profiliert in drei Zeilen in der Datenbank.
Der Profiler zeigt manchmal Infrastrukturgrenzen an: Festplatten-E/A für Sitzungsdateien → Redis-Sitzungen; langsame DNS-Auflösung → fester Resolver; OPcache deaktiviert → sofortige Aktivierung. Das Aktualisieren von VPS vor der Profilerstellung bleibt eine häufige Verschwendung.
Bevor Sie ein „Instanz zu klein“-Ticket öffnen, erstellen Sie ein Profil der durch die Überwachung identifizierten langsamen Route. Querverweis auf OPcache Invalidation, wenn die aktuelle Bereitstellung eine Mischung aus alten und neuen Versionen des Codes bereitstellen könnte.
Der Gipfel: Optimieren ohne Profiling ist Refactoring zum Spaß
Folgendes habe ich am Freitagabend vergessen zu zeigen: „Ich habe eine Zeile optimiert“.
Teamregel: geschlossenes Leistungsticket mit Vorher-/Nachher-Erfassung – Blackfire-Link oder SPX-Export.
Entscheide dich und gehe ohne blinden Fleck voran
Innerhalb eines halben Tages können Sie eine Messdisziplin etablieren:
- Identifizieren Sie die Zielroute über APM-Überwachung oder Slowlog.
- Profil in der Vorproduktion unter realistischer Belastung.
- Reparieren Sie nur den oberen Rand des Brenndiagramms.
- Erneutes Messen des 95. Perzentils in der Produktion.
- Dokumentieren Sie die Lektion – klassische N+1-Abfragen?
Beginnen Sie mit der Route, die Benutzer tatsächlich erwarten – nicht mit der Route, die Sie in der Entwicklung am häufigsten sehen. Kreuzen Sie PHP-FPM-Sättigung, Fehlender MySQL-Index und EXPLAIN PostgreSQL entsprechend Ihrer Basis-Engine an.
Häufig gestellte Fragen
Welches Werkzeug soll in der Produktion profiliert werden?
SPX- oder Blackfire/Tideways-Lichtproben. Führen Sie in der Produktion niemals Xdebugs im Schritt-für-Schritt-Modus durch. Das PHP-FPM-Protokoll für langsame Abfragen reicht aus, um lange E/A-Vorgänge ohne vollständigen Overhead zu erkennen.
Reicht der Xdebug-Profiler im Staging aus?
Ja, wenn die Daten und der Datenverkehr produktionsnah sind. Profilieren Sie langsame Routen, die durch die Überwachung identifiziert wurden – nicht nur die Startseite, die die tatsächlichen Engpässe verbirgt.
Wie liest man ein Flammendiagramm?
Die Breite stellt die kumulierte Zeit dar. Suchen Sie nach unerwartet breiten Balken – PDO, Curl, Unserialize. Optimieren Sie zuerst den größten Wert gemäß dem Pareto-Gesetz.
Profiler zeigt PDO langsam an – was tun?
Führen Sie EXPLAIN für die SQL-Abfrage aus, überprüfen Sie Indizes und ORM N+1-Abfragen. Der Profiler zeigt an, wo Zeit vergangen ist; EXPLAIN erklärt, warum die Basis langsam reagiert.
Das Messen einer PHP-Zeile kostet weniger, als sie zweimal neu zu schreiben – zuerst das Profil, dann das Ego.
