Letzte Woche wurde ein Problem mit einer Seite berichtet. Dort wurde manchmal auf einer Seite ein 500er Fehler angezeigt, aber leider nicht immer. Nach der Aktivierung des WP_DEBUG Modus konnte ich sehr schnell feststellen, dass das Speicherlimit überschritten wurde. Die einzige Lösung war es, das Speicherlimit zu erhöhen, da die Funktionalität auf dieser Seite viel Speicher brauchte und es keine schnelle Optimierung gab.
In solchen Fällen wäre es dann schön, wenn man rausfinden könnte, wie hoch das Limit erhöht werden muss. Wie viel Speicher verbraucht also eine Seite normalerweise. Es gibt mehre Wege, dies herauszufinden.
Der gefährliche Weg
Eine sehr einfache Lösung wäre es das Speicherlimit erst einmal zu verringern, bis der Fehler jedes Mal auftritt. Dann erhöht man das Limit schrittweise, bis der Fehler nur noch selten auftritt. Dies ist der Wert, um den herum sich der eigentliche Verbrauch bewegen wird. Zu diesem Wert fügt man noch etwas Puffer hinzu, und prüft, ob der Fehler nun nicht mehr auftritt.
Selbstverständlich ist das kein wirklich guter Ansatz! Wenn ihr das auf einer Live Website macht (die eventuell einen anderen Speicherverbrauch als eure lokale Entwicklungsumgebung hat), dann verursacht ihr absichtlich einen Absturz der Seite. Das mag für wenige Minuten und zu einer Zeit mit wenigen Zugriffen in Ordnung sein, aber es gibt bessere Wege das Limit zu finden.
Verwendung des „Query Monitor“ Plugins
Egal für welche Debugging-Zwecke, ich prüfe immer zuerst, ob das Query Monitor Plugin weiterhelfen kann, da es sehr viele Debugging-Informationen liefert. Glücklicherweise gibt es auch eine Info zum Speicherlimit. Dieses findet ihr in der „Übersicht“:
Hier könnt ihr die „Peak Memory Usage“ auslesen und auch sehen, wie viel vom gesetzten Speicherlimit das ist. Auf Seiten mit einem 500er Fehler erhöht ihr also das Limit und prüft dann mit dem Query Monitor wie viel effektiv verbraucht wird, um einen guten neuen Wert zu finden.
Euer eigenes Hilfsplugin schreiben
Der Query Monitor verwendet eine Kernfunktion von PHP um diese Zahlen zu ermitteln. Ihr solltet euch daher mal die Funktionen memory_get_usage() und memory_get_peak_usage() für euer Hilfsplugin ansehen. Diese sind vor allem dann hilfreich, wenn ihr eine Seite debuggen möchtet, auf denen der Query Monitor nicht verwendet werden kann oder wenn ihr das Speicherlimit in einem AJAX/REST Aufruf oder ähnlichem finden wollt.
Fazit
Fehler mit dem Speicherlimit zu finden ist manchmal etwas knifflig. Aber mit dem Query Monitor Plugin oder ein paar Kernfunktionen von PHP ist es schon sehr viel einfacher. Viel schwieriger ist es aber einen Weg zu finden, damit eure Website gar nicht erst so viel Speicher verbraucht. Ich habe das Problem vor allem bei einigen mächtigen Page-Buildern gesehen, die teilweise mehr als 512 MB im Backend verlangen!