Je reçois une erreur de mémoire dans un travail cron php:
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
Les parties applicables de la crontab sont:
$ Sudo crontab -u www-data -l
MAILTO=root
# m h dom mon dow command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix
Je fonctionne sur Debian Squeeze, entièrement mis à jour.
La solution évidente serait que le cli a une faible limite de mémoire (de 64 Mo). Cependant, /etc/php5/cli/php.ini dit que c'est illimité.
$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1
J'ai lu quelque part que cela pourrait être différent pour différents utilisateurs, et comme le processus s'exécute en tant que www-data, j'ai exécuté:
$ Sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0
Même Apache/php.ini a une limite supérieure à ce que l'erreur prétend:
$ Sudo cat /etc/php5/Apache2/php.ini | grep memory_limit
memory_limit = 128M
Qu'est-ce que je rate? Où est cette limite de mémoire?
IIRC, un memory_limit illimité n'est pas pris en charge par la CLI (je vais essayer de trouver une source pour cela) mais pour l'instant, essayez de le passer dans la commande:
php -d memory_limit=128M my_script.php
MISE À JOUR
Apparemment, je rêvais que le nombre illimité de memory_limit n'était pas pris en charge pour php cli. Quoi qu'il en soit, il semble que la valeur de l'ini soit ignorée. La solution la plus simple devrait alors être de le définir spécifiquement dans la commande php appelant le script.
PDATE2
Pour répondre à la question de savoir d'où vient la limite de mémoire, elle est très probablement définie dans le script lui-même à l'aide de 'ini_set'.
Lors du test d'une version php CLI 5.5.9
il apparaît que dans cli il a illimité la limite de mémoire par défaut, et en spécifiant php -d memory_limit=4G my_script.php
fixera une limitation à cela.