Сценарий Php CLI игнорирует memory_limit, сбой при гораздо меньшем числе, чем предел

по какой-то причине мой один из моих php-скриптов игнорирует ограничение памяти php.ini или ini_set.

Когда я делаю print_r (ini_get_all), он показывает, что глобальный лимит памяти установлен на 100 МБ (и локальный, если на то пошло), когда мой скрипт умирает при фатальной ошибке: Недостаточно памяти (выделено 24714304) (пытался выделить 571 байт)

Любые советы по диагностике этого? На сервере 8 гигабайт памяти, и раньше у него никогда не было проблем с запуском этого скрипта.

Любые советы по отладке этого?

Спасибо!


person james    schedule 30.12.2009    source источник


Ответы (3)


Единственная наиболее распространенная причина этого заключается в том, что обычно двоичный файл CLI PHP использует другой файл php.ini, чем вы ожидаете. Это может быть вызвано разрешения пользователя или просто разные файлы php.ini по умолчанию для установленных версий PHP. Однако похоже, что вы немного профилировали его, и ваш лимит памяти может быть правильным в вашем скрипте.

В этом случае вполне возможно, что существует жесткое ограничение памяти для процессов, наложенное вашей операционной системой, и в этом случае вам придется выяснить, откуда берется такое ограничение.

Я предлагаю взглянуть на эту тему, так как этот постер прошел через что-то очень похожее на вашу ситуацию.

person zombat    schedule 30.12.2009
comment
возможно, вы правы, может действовать жесткий лимит. понятия не имею, как это найти. возможно, я спрошу об ошибке сервера! - person james; 31.12.2009
comment
вы умный человек, я провел небольшое исследование об ограничениях памяти bash, проверьте ulimit -v, который сильно ограничил мою память !!! - person james; 31.12.2009
comment
Для меня проблема заключалась в запуске php-fpm, но копировании файла конфигурации в cli/conf.d вместо fpm/conf.d. Объясняет, почему php -i показывал мою обновленную конфигурацию, но скрипт все еще давал сбой. - person Dash; 15.12.2020

Виртуальная память для моих процессов была жестко ограничена (слишком меньше).

Из оболочки bash я сделал это:

ulimit -v (memory_in_bytes, без скобок)

это исправило мою проблему. боже, я люблю stackoverflow

person james    schedule 30.12.2009

короткий и сладкий

ini_set('memory_limit', -1);

если вы хотите пропустить отладку

person mozillalives    schedule 30.12.2009
comment
Я думаю, что он уже прошел этот этап. Его настройки INI уже стоят на 100M. - person Pekka; 31.12.2009
comment
хорошо, я сделал это, но это не сработало. На самом деле, если я распечатаю свой phpinfo(), он покажет гораздо более высокий предел памяти, а когда я распечатаю ini_get_all(), будут показаны любые изменения ограничения памяти. - person james; 31.12.2009