it-swarm.com.de

PHP CLI Speicherlimit

Ich erhalte einen Speicherfehler in einem PHP-Cron-Job:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 71 bytes) in /opt/matrix/core/lib/DAL/DAL.inc on line 830

Die anwendbaren Teile der Crontab sind:

$ Sudo crontab -u www-data -l
MAILTO=root
# m h  dom mon dow   command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix

Ich laufe auf Debian Squeeze, vollständig aktualisiert.

Die naheliegende Lösung wäre, dass das CLI eine niedrige Speichergrenze (von 64 MB) hat. Laut /etc/php5/cli/php.ini ist dies jedoch unbegrenzt.

$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1

Ich habe irgendwo gelesen, dass es für verschiedene Benutzer unterschiedlich sein kann, und da der Prozess als WWW-Daten ausgeführt wird, habe ich Folgendes ausgeführt:

$ Sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0

Sogar die Apache/php.ini hat eine höhere Grenze als der Fehler behauptet:

$ Sudo cat /etc/php5/Apache2/php.ini | grep memory_limit
memory_limit = 128M

Was vermisse ich? Wo ist diese Speichergrenze?

43
Ryan H

IIRC, ein unbegrenztes Speicherlimit wird von der CLI nicht unterstützt (ich werde versuchen, eine Quelle dafür zu finden), aber versuchen Sie zunächst, es an den Befehl zu übergeben:

php -d memory_limit=128M my_script.php

UPDATE

Anscheinend habe ich davon geträumt, dass das unbegrenzte memory_limit für PHP CLI nicht unterstützt wird. Unabhängig davon sieht es so aus, als würde der Wert von der INI ignoriert. Die einfachste Lösung sollte dann darin bestehen, sie im php-Befehl, der das Skript aufruft, spezifisch festzulegen.

PDATE2

Um die Frage zu beantworten, woher das Speicherlimit stammt, wird es höchstwahrscheinlich im Skript selbst mit 'ini_set' festgelegt.

76
DTest

Beim Testen einer CLI-PHP-Version 5.5.9 es scheint, dass in cli standardmäßig das Speicherlimit nicht aktiviert ist und php -d memory_limit=4G my_script.php wird dies einschränken.

0
adrianTNT