WAMP Stack/Silverstripe, hohe TTFB, aber schnelle PHP-Ausführung? Wo kann ich nach Antworten suchen?

WAMP Stack/Silverstripe, hohe TTFB, aber schnelle PHP-Ausführung? Wo kann ich nach Antworten suchen?

Mein Produktionsserver ist Windows Server 2012 R2, Apache 2.4, PHP 5.6 und MariaDB (Version nicht sicher, wahrscheinlich irrelevant). Ich habe eine angepasste Site, die auf Silverstripe 3.5 läuft.

In letzter Zeit bekomme ich bei bestimmten Aktionen lächerliche TTFBs, insbesondere beim Anmelden (über 30 Sekunden) oder manchmal zufällig beim Durchsuchen des Backends. Seltsamerweise passiert dies auf unserem Entwicklungsserver, der ähnlich konfiguriert ist, nicht, und unsere IT-Abteilung wird sich das ansehen httpd.confund php.iniprüfen, ob es Unterschiede gibt, die ein Problem darstellen könnten.

Ich habe die Zend OpCache-Erweiterung in der Hoffnung aktiviert, dass sie helfen würde, sehe jedoch keine nennenswerten Verbesserungen.

Ich habe XDebug installiert und beim Anmelden die Profilerstellung ausgelöst (indem ich über den DOM-Inspektor ein verstecktes Formularfeld mit dem Namen XDEBUG_PROFILE hinzugefügt habe), aber die Ausgabe in WinCachegrind besagt, dass die Ausführung von PHP insgesamt nicht länger als 5 Sekunden gedauert hat – die gesamte Gesamtzeit betrug main.phpalso 4,x Sekunden. Es scheint keinen nennenswerten Engpass in der Framework-Logik oder beim Datenbankzugriff zu geben.

httpd.exebeansprucht für die Dauer der Anfrage satte 14 % meiner CPU. Das Betrachten der Protokolle mit Powershell gci -Waitzeigt, dass die Anfrage erst angemeldet wird access.log, nachdem die Antwort gesendet wurde (nicht sicher, ob das normales Verhalten ist) und dass keine Fehler auftreten.

Ich bin ratlos, warum Apache so lange braucht, um eine Anfrage zu verarbeiten, für die PHP angeblich nur 4 Sekunden für die logische Ausführung braucht. Obwohl mögliche Lösungen willkommen wären, würde ich wirklich gerne wissen, wo ich sonst noch in Bezug auf Diagnosen nachsehen kann, um herauszufinden, was Apache so langsam macht, z. B. Dateizugriff, Ausführungsverfolgung usw.? Ich habe nicht die geringste Ahnung, wo ich überhaupt mit der Suche beginnen soll.

Antwort1

Die Datenbank wurdenichtder Engpass. Ironischerweise war es derZwischenspeicher- es ist einbekanntes Problem, dass Zend_Cache_Backend_File-basierte Caches ekelhaft langsam sind, wenn die Site viele Daten, Vorlagen und Bilder zwischenzuspeichern hat. Tatsächlich enthielt mein Silverstripe-Cache-Ordner auf dem Server über 5.000 Dateien.

Das Hinzufügen der folgenden Zeile zum ./mysite/_config.phpDeaktivieren des Caching führte zu sofortigen, überwältigenden Verbesserungen (35 Sekunden TTFB beim Anmelden wurden auf weniger als 0,5 Sekunden reduziert!):

SS_Cache::set_cache_lifetime('default', -1, 100);

Jedoch, dies ist eine vorübergehende Lösung. Wir werden uns darum bemühen, eine dauerhaftere, praxisorientiertere Lösung für die Caching-Verwaltung zu implementieren, beispielsweise die Verwendung einer Ramdisk in Verbindung mit dem Dateisystem-Backend oder die Nutzung eines Backends, das Speicherpools wie XCache oder Memcached verwendet. Außerdem arbeiten wir an der Umstellung auf Silverstripe 4.x, das Dumps Zend_Cachezugunsten von durchführt symfony/cache.

Aber da es in meinem Büro gern zulässt, dass die Bürokratie alles behindert, könnte es noch eine Weile dauern, bis das passiert.

verwandte Informationen