Je reçois une erreur de mémoire dans un travail PHP cron:
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 cours sur Debian Squeeze, entièrement à jour.
La solution évidente serait que la cli ait une limite de mémoire basse (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 puisque le processus s'exécute en tant que www-data, j'ai lancé:
$ 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 plus élevée que l'erreur ne 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?
Lors du test d'une version php de l'interface de ligne de commande,
5.5.9
il apparaît que, dans cli, la limite de mémoire non autorisée est définie par défautphp -d memory_limit=4G my_script.php
. Cette spécification définira une limitation à cette limite.la source
Si vous installez PHP en tant que module Apache (cochez la case "API du serveur"
phpinfo()
), vous devez l'appeler via un navigateur Web en ligne de commande (wget, curl, lynx, ...) dans le travail cron, à peu près comme ceci:la source