6 Stimmen

Php CLI-Script ignoriert memory_limit und stürzt bei einer viel niedrigeren Zahl ab als die Grenze.

Aus irgendeinem Grund ignoriert eines meiner PHP-Skripte das php.ini-Speicherlimit oder ini_set.

Wenn ich print_r(ini_get_all) mache, zeigt es das globale Speicherlimit auf 100M (und auch lokal) gesetzt, wenn mein Skript bei Fatal error: Out of memory (allocated 24714304) (versuchte, 571 Bytes zuzuweisen) stirbt

Irgendwelche Tipps zur Diagnose? Der Server hat 8 GB Speicher und hatte noch nie Probleme beim Ausführen dieses Skripts.

Irgendwelche Tipps zum Debuggen?

Danke!

5voto

zombat Punkte 89911

Die häufigste Ursache dafür ist in der Regel, dass das CLI PHP-Binary eine andere php.ini-Datei verwendet, als du erwartest. Dies kann durch Benutzerberechtigungen oder einfach durch unterschiedliche Standard-php.ini-Dateien für installierte Versionen von PHP verursacht werden. Es scheint jedoch, als ob du es ein wenig analysiert hast und dein Speicherlimit im Skript möglicherweise korrekt ist.

In diesem Fall ist es durchaus möglich, dass es ein hartes Speicherlimit für Prozesse gibt, das von deinem Betriebssystem auferlegt wird, in welchem Fall du herausfinden musst, wo die Auferlegung herkommt.

Ich schlage vor, einen Blick auf diesen Thread zu werfen, da der Poster etwas sehr Ähnliches wie deine Situation durchgemacht hat.

0 Stimmen

Du könntest recht haben, es könnte eine harte Grenze in Kraft sein. Ich habe keine Ahnung, wie man das finden kann. Vielleicht frage ich auf dem Server-Fehler!

0 Stimmen

Du bist eine kluge Person. Ich habe ein wenig Recherche über die Bash-Speicherlimits gemacht. Schau dir ulimit -v an, was meinen Speicher hart begrenzt hat!!!

0 Stimmen

Für mich lag das Problem darin, dass ich php-fpm ausgeführt habe, aber die Konfigurationsdatei in cli/conf.d anstelle von fpm/conf.d kopiert habe. Das erklärt, warum php -i meine aktualisierte Konfiguration angezeigt hat, aber das Skript immer noch abgestürzt ist.

5voto

james Punkte 3413

Der virtuelle Speicher für meine Prozesse wurde hart begrenzt (auf eine viel niedrigere Zahl).

Von einer Bash-Shell aus habe ich Folgendes gemacht:

ulimit -v (Speicher_in_Byte, keine Klammern)

Dies hat mein Problem behoben. Ich liebe stackoverflow wirklich

0voto

mozillalives Punkte 1450

Das kurze und süße

ini_set('memory_limit', -1);

falls du das Debugging überspringen möchtest

0 Stimmen

Ich denke, er ist bereits über diesen Punkt hinaus. Seine INI-Einstellungen sind bereits auf 100M.

0 Stimmen

Nun, ich habe das gemacht, aber es hat nicht funktioniert. Tatsächlich wird, wenn ich mein phpinfo() ausdrucke, ein viel höheres Speicherlimit angezeigt, und in ini_get_all() werden alle Speicherlimitänderungen angezeigt.

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