2009-12-30 3 views
6

aus irgendeinem Grund, meine eine meiner PHP-Skripte ignorieren die php.ini Speicherlimit oder ini_set.PHP CLI-Skript ignoriert memory_limit, abstürzt bei viel niedrigeren Anzahl als

Wenn ich eine print_r (ini_get_all) mache, zeigt das globale Speicherlimit auf 100M (und lokal für diese Angelegenheit), wenn mein Skript bei Fatal error: Nicht genügend Arbeitsspeicher (allocated 24714304) (versucht, 571 Bytes zuzuordnen))

Irgendwelche Tipps zur Diagnose? Der Server verfügt über 8gig Speicher und hatte nie Probleme, dieses Skript vorher auszuführen.

Irgendwelche Tipps zum Debuggen?

Danke!

Antwort

5

Die häufigste Ursache hierfür ist, dass die CLI PHP-Binärdatei normalerweise eine andere php.ini-Datei verwendet als erwartet. Dies kann durch user permissions oder einfach andere default php.ini-Dateien für installierte PHP-Versionen verursacht werden. Es klingt jedoch so, als ob Sie es ein wenig profiliert haben und Ihr Speicherlimit in Ihrem Skript korrekt ist.

In diesem Fall ist es sehr wahrscheinlich, dass es eine harte Speicherbegrenzung für Prozesse gibt, die von Ihrem Betriebssystem auferlegt wird. In diesem Fall müssen Sie herausfinden, woher das Ausschießen stammt.

Ich schlage vor, einen Blick auf this thread zu werfen, da das Poster durch etwas sehr ähnlich zu Ihrer Situation ging.

+0

Sie könnten Recht haben, kann es eine harte Grenze in Kraft sein. Ich habe keine Ahnung, wie ich das finde. vielleicht werde ich auf Serverfehler fragen! – james

+0

Sie sind eine intelligente Person Ich habe einige Nachforschungen über Bash Speichergrenzen Check-out ulimit -v, die hatte hart begrenzt mein Gedächtnis !!! – james

+0

Schön, dass Sie es gefunden haben. – zombat

0

die kurz und süß

ini_set('memory_limit', -1); 

falls Sie das Debuggen hart begrenzt wurde (auch eine viel geringere Zahl)

+0

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

+0

Nun, ich habe das getan, aber es hat nicht funktioniert. In der Tat, wenn ich meine phpinfo() ausdrucken, wird es eine viel höhere Speichergrenze zeigen, und wenn ich ini_get_all() ausdrücke, werden irgendwelche Speicherbegrenzungsänderungen gezeigt. – james

5

Den virtuellen Speicher für meine Prozesse überspringen.

Von einer Bash-Shell ich dies tat:

ulimit -v (memory_in_bytes, keine Klammern)

dies behoben mein Problem. Gott ich liebe stackoverflow