Fatal error: Out Of Memory

  • Hallo,
    am Ende des Aktualisierungsvorgangs auf Wordpress 3.9 erscheint die folgende Fehlermeldung:

    Fatal error: Out of memory (allocated 63176704) (tried to allocate 88 bytes) in /home/www/wp-includes/option.php on line 149

    Im Englischsprachigen Foren wird vorgeschlagen, zuerst in die .htaccess die Zeile

    php_value memory_limit 64M

    einzufügen und falls das den Fehler nicht behebt, in die wp-config.php die Zeile

    define('WP_MEMORY_LIMIT', '64M');

    einzufügen. Ich poste nun diese Fehlermeldung, weil beide Varianten dieses Problem nicht behoben haben. Seit dieses Problem auftrat, ist mein Backend außerdem sehr langsam geworden. Vielleicht hängt beides zusammen ? Bin über jeden Tipp dankbar !

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Die Fehlermeldung besagt, das dein maximale Memory-Limit erreicht ist. Entweder erhöht dein Hoster dieses Limit oder du deaktivierst ein paar Plugins.

  • Hallo Hille, das Memory-Limit meines Hosters habe ich gerade auf sagenhafte 128m erweitert. Laut Support sollte es daran nicht liegen. Wie bekomme ich den speicherplatzintensive Plugins heraus ?

  • Hallo Melewo,
    die 128M habe ich jüngst durch ein Paket-Upgrade bei meinem Hoster erworben :shock:! Das Plugin WP-memory-usage zeigt an, dass meine HP mal gerade 33% des Speicherbedarfs braucht. Deshalb erscheint mir die Fehlermeldung sehr komisch.
    Underdessen habe ich einige (unwichtoigen) Plugins deaktiviert. Leider Ohne Erfolg, die Fehlermeldung kommt nach wie vor :-(.

  • Das Plugin WP-memory-usage zeigt an, dass meine HP mal gerade 33% des Speicherbedarfs braucht.


    Im Ruhezustand, also wenn keine Aktualisierung läuft?

    Wollte das Plugin noch einmal näher betrachten, bin nur noch nicht dazu gekommen, somit braucht das nicht richtig zu sein, was ich schreibe. WP-memory-usage benutzt memory_get_usage und hakt über init ein, so wie ich das verstehe.
    Der init Hook soll aber einhacken, nachdem WP die meisten Dateien bereits verarbeitet hat, jedoch noch bevor ein Request oder eine Response gesendet wurde. Somit bin ich mir nicht sicher, was da alles erfasst wird und wie zuverlässig das ist. Könnte mir schon vorstellen, dass so eine Aktualisierung zusätzliche Spitzen verursacht.

    Was ich aber mit ziemlicher Gewissheit weiß, dass sich der Wert von memory_get_usage mit jeder Codezeile innerhalb eines Scripts verändert, zum Beispiel weil eine weitere Datei geöffnet und geladen wird und einige Zeilen weiter kann dieser Wert schon wieder zurückgesetzt werden, weil bis auf drei Treffer wieder alles aus dem Speicher gelöscht wurde.

  • "Out of Memory" hat ja erstmal nichts mit dem PHP-Memory-Limit zu tun. So wie es da oben in der Fehlermeldung steht, liegt die Grenze bei ca. 60 MB, und zwar Betriebsystemseitig. Der PHP-Prozess bekommt einfach nicht mehr Speicher zugeteilt. Das ist ein typisches Verhalten z.B. bei 1&1.

    Bei welchem Hoster bist Du denn?

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Bin bei WebHostOne. Wenn die Speichergrenze bei 60m liegt, dann bekomme ich nicht das Webpaket, für das ich zahle. Worpress zeigt mit eine Speicherkapazität von 128m an. Stimmt das etwa nicht ?

  • ...kenne mich mit php nicht so gut aus. Muss ich nicht auch die Ausgabe des Rückgabewertes dieser Funktion angeben ? Und gibt es nicht (doch) ein Plugin, welches mir den Speicherbedarf der verwendeten Plugins (in Echtzeit) mit angibt ? Danke

  • ...kenne mich mit php nicht so gut aus. Muss ich nicht auch die Ausgabe des Rückgabewertes dieser Funktion angeben ?


    Nein.

    Und gibt es nicht (doch) ein Plugin, welches mir den Speicherbedarf der verwendeten Plugins (in Echtzeit) mit angibt ?


    Mir fehlt jede Vorstellung, wie das funktionieren könnte. Nur als Beispiel, wie das von einer Zeile zur nächsten bereits in so einem kleinen Script schwankt. Hätte es jetzt in der Mitte durch die zusätzliche Funktion für höher gehalten, ist aber um 24 Bytes geringer, vermutlich weil der Teilstring mehr benötigte als die zusätzliche Funktion. Und dann versuche da einmal bei WP richtige Werte über Hooks abzugreifen.

    Einmal editiert, zuletzt von Melewo (29. April 2014 um 15:20)

  • Bin bei WebHostOne. Wenn die Speichergrenze bei 60m liegt, dann bekomme ich nicht das Webpaket, für das ich zahle. Worpress zeigt mit eine Speicherkapazität von 128m an. Stimmt das etwa nicht ?

    Du hast das Paket "Multi-App"? Da gibt es laut Homepage des Webhosters 128 MB "RAM-Power für dynamische Projekte".

    Ich kann es gerne auch nochmal wiederholen. Der oben genannte Fehler hat nichts mit dem PHP-Memory-Limit zu tun. Da kann WP anzeigen, was es will. Die Begrenzung "Out of Memory" schlägt betriebsystemseitig zu.
    Einen Speichertest enthält z.B. das Plugin "WP System Health"

    Ich habe selbst mal ein Testskript geschrieben, welches unabhängig von WP-Läuft und einfach immer mehr Speicher anfordert. Da sieht man auch, wo die echte Grenze liegt.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Der oben genannte Fehler hat nichts mit dem PHP-Memory-Limit zu tun. Da kann WP anzeigen, was es will. Die Begrenzung "Out of Memory" schlägt betriebsystemseitig zu.


    Was aber letztendlich nur daran liegen wird, dass PHP im Grunde selbst nichts weiter als eine Anwendung ist, die für jede Variable usw. im System einen Speicherplatz reservieren muss. Die php.exe kann ja nun einmal von sich wohl rein gar nichts speichern, sondern nur im System. Doch es wäre eigentlich zu erwarten, dass die Konfigurationen aufeinander abgestimmt stimmt sind.

    http://en.wikipedia.org/wiki/Out_of_memory

    Ich hatte bisher nur einen Test auf Überschreitung gemacht, in dem ich versuchte eine CSV mit 200.000 Zeilen in ein Array zu laden und dann mit einer Schleife auszulesen. Da erhielt ich dann aber nicht die Mitteilung "Out of Memory" sondern "Allowed memory size of 134217728 bytes exhausted", was ja der Einstellung in der php.ini " memory_limit = 128M entspricht.

    Nach dem Unterschied zwischen den beiden Mitteilungen hatte ich mal gesucht, alles was ich fand, dass die Mitteilung "out of memory" von PHP stammt und die "Allowed memory size" vom PHP Interpreter Zend.

    Wie man nun die erste Mitteilung unter Localhost auslösen kann, darüber habe ich mir noch keine Gedanken, ob das überhaupt so einfach geht, nur durch eine Datei mit Übergröße laden jedenfalls anscheinend nicht.

    Einmal editiert, zuletzt von Melewo (29. April 2014 um 18:16)

  • Der Parameter memory_limit ist ja nur so eine Art "freiwillige Selbstkontrolle" von PHP. Der Speichermanager in PHP fordert halt beim Erreichen dieser Grenze keinen weiteren Speicher mehr vom System an, selbst wenn dort nocht genug vorhanden ist.

    Sinnigerweise sollte der memory_limit-Wert unter dem Wert für das Prozesslimit des Betriebssystems liegen.

    Wie man die Grenze austesten kann?
    Ganz einfach, in der php.ini das memory_limit auf -1 (unlimitiert) setzen und dann ein PHP-Skript starten, daß in einer Endlosschleife Speicherblöcke z.B. mit str_pad in ein array schreibt. So sieht übrigens mein kleines Test-Skript aus:

    Damit es nicht so lange dauert, kann man noch die Blockgröße bei BS (in MB) erhöhen.

    Entweder es kommt dann irgendwann eine "Out of Memory"-Meldung oder das System bricht sonst irgendwie zusammen, weil es nur noch mit dem Umlagern des virtuellen Speichers beschäftigt ist. :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Habe den Wert in der php.ini auf

    Code
    memory_limit = 12M


    gesetzt und in der wp-config.php

    Code
    define('WP_MEMORY_LIMIT', '12M');


    ebenfalls, dann den Apache neu gestartet und Wordpress aufgerufen. Weiße Seite und Ausgabe:

    Zitat

    Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 393216 bytes) in ...


    Dann mit Deinem Script und memory_limit = 12M

    Zitat

    Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 5242881 bytes) in ...


    und dann noch einmal mit memory_limit = -1 und mit Deinem Script.

    Zitat

    Fatal error: Out of memory (allocated 1822687232) (tried to allocate 5242881 bytes) in ...


    (Und somit um ein Vielfaches höher.)

    Überschreitung des in php.ini oder in WP definierten Memory Limits sollte somit diese Fehlermitteilung auslösen:

    Allowed memory size of

    Und bei Überschreitung der Grenzbereiche vom Sytem, diese Fehlermitteilung:

    Out of memory

    Da muss ich mal in Zukunft darauf achten, wo überall das verdreht angegeben wurde, denke ziemlich häufig.

  • Und bei Überschreitung der Grenzbereiche vom Sytem,


    Überschreitung der Grenzbereiche vom Sytem würde sich nicht richtig anhören, eher was das System PHP zubilligt, um nicht andere Anwendungen in Bedrängnis zu bringen, nehme ich mal an.

  • Diesen Unterschied versuche ich den Leuten schon seit gefühlten 10 Jahren zu vermitteln. Zum ersten Mal ist mir das so deutlich bei 1&1 aufgefallen.

    Ich weiß nicht, wie das bei Windows ist, aber bei unixoiden Betriebssystemen gibt es Möglichkeiten, die Ressourcen (Speicher, CPU-Zeit usw.) je Prozess und ggf. abhängig vom Nutzer zu begrenzen. Das scheint 1&1 zu verwenden, um die dem Nutzer je nach Hosting-Paket zustehenden Ressourcen zu begrenzen.

    Das Problem ist aber, daß PHP aus ein und der selben Ini-Datei für alle konfiguriert wird, egal welcher Nutzer (Kunde) nun gerade einen Prozess ausführt. Deshalb stand dort für das memory_limit der maximale Wert drin, der den Kunden mit dem teuersten Paket zugebilligt wurde. Bei den kleineren Paketen schlug dann halt der "Out of Memory" bereits früher zu.

    Danke Melewo, daß Du den Selbstversuch durchgeführt hast. Immerhin konnte sich PHP bei dir ca. 1,7 GB Speicher genehmigen. Ich hatte den Versuch mal in meinem Webhostingpaket bei All-Inkl durchgeführt. Da ging dann irgendwann der Server in die Knie. :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!