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 offensichtliche Lösung wäre, dass der CLI eine niedrige Speichergrenze (von 64 MB) hat. /Etc/php5/cli/php.ini sagt jedoch, dass es unbegrenzt ist.
$ 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 ein höheres Limit als der Fehler behauptet:
$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M
Was vermisse ich? Wo ist diese Speichergrenze?
Beim Testen einer CLI-PHP-Version
5.5.9
scheint es, dass in CLI standardmäßig eine unbegrenzte Speicherkapazität vorhanden ist. Wenn Sie diese angeben,php -d memory_limit=4G my_script.php
wird eine Einschränkung auf diese festgelegt.quelle
Wenn Sie PHP als Apache-Modul installieren ("Server-API" aktivieren
phpinfo()
), sollten Sie es über einen Befehlszeilen-Webbrowser (wget, curl, lynx, ...) im Cron-Job wie folgt aufrufen:quelle