Назад | Перейти на главную страницу

ограничение памяти php cli

Я получаю ошибку памяти в задании 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

Применимые части crontab:

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

Я работаю на Debian Squeeze, полностью обновлен.

Очевидным решением будет то, что cli имеет низкий предел памяти (64 МБ). Однако /etc/php5/cli/php.ini говорит, что это неограниченно.

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

Я где-то читал, что для разных пользователей это может быть разным, и, поскольку процесс выполняется как www-данные, я запустил:

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

Даже apache / php.ini имеет более высокий предел, чем утверждает ошибка:

$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M

Что мне не хватает? Где этот предел памяти?

IIRC, неограниченный memory_limit не поддерживается CLI (я попытаюсь найти для этого источник), но пока попробуйте передать его в команду:

php -d memory_limit=128M my_script.php

ОБНОВИТЬ

Видимо, я мечтал о том, что неограниченный memory_limit не поддерживается для php cli. Тем не менее, похоже, что значение из ini игнорируется. Тогда самым простым решением должно быть специальное задание его в команде php, вызывающей скрипт.

ОБНОВЛЕНИЕ2

Чтобы ответить на вопрос, откуда исходит ограничение памяти, скорее всего, он устанавливается в самом скрипте с помощью ini_set.

При тестировании версии CLI php 5.5.9 похоже, что в cli по умолчанию установлен неограниченный лимит памяти, и указав php -d memory_limit=4G my_script.php установит ограничение на это.

Если вы устанавливаете PHP как модуль Apache (отметьте «Server API» в phpinfo()), вы должны вызвать его через веб-браузер командной строки (wget, curl, lynx, ...) в задании cron, примерно так:

*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1