PHP: Allowed memory size exhausted

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Увеличьте memory_limit и найдите причину избыточного расхода памяти.

В этой статье
  1. Что означает сообщение
  2. Причины и признаки
  3. Пошаговое решение
  4. На что обратить внимание

#Что означает сообщение

Сообщение
Allowed memory size exhausted

Увеличьте memory_limit и найдите причину избыточного расхода памяти.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Малый лимитПиковое потребление близко к memory_limitОптимизировать и обоснованно увеличить лимит
Тяжёлый плагинОшибка появляется только на одном модулеПрофилировать его потребление
Утечка в кодеПамять растёт с числом объектов без освобожденияУстранить неограниченное накопление
Большой массивЗагрузка всех строк SQL в один массивПерейти на обработку порциями

#Пошаговое решение

  1. Найдите процесс и точку перерасхода памятиВ журнале PHP найдите точную строку Allowed memory size of ... bytes exhausted и путь файла со строкой кода. Это лимит memory_limit для конкретного процесса PHP, а не сообщение о свободной памяти всего сервера. Уточните, ошибка возникает у веб-запроса, обработчика очереди или CLI: настройки у них могут отличаться. Временно добавьте в контролируемую отладку memory_get_peak_usage(true) и воспроизведите ошибку на тестовых данных.
  2. Исключите ненужную загрузку больших массивовПросмотрите код указанной функции: не читает ли она весь файл через file_get_contents, все строки SQL через fetchAll или создаёт ли копии больших массивов. При возможности переходите на чтение порциями, генераторы, курсоры и ограничение запросов. Для изображений учтите память под несжатое растровое изображение, часто значительно превышающую размер JPEG на диске. Сначала устраните неограниченное накопление данных, затем решайте, нужен ли больший лимит.
  3. Изменяйте memory_limit только для нужной средыУ администратора выясните активный конфигурационный файл через CLI php --ini, но для сайта отдельно через phpinfo() или настройки PHP-FPM. В нужном php.ini/пуле установите обоснованный memory_limit, например 256M вместо 128M, только если сервер имеет запас и известно число одновременных процессов. Перезапустите соответствующий пул по регламенту. Не устанавливайте -1 без измерения: много PHP-процессов могут исчерпать RAM сервера.
  4. Проверьте пиковое потребление и нагрузкуПовторите проблемную операцию и убедитесь, что запрос завершился, а пиковое потребление памяти остаётся ниже лимита с запасом. Проверьте журналы веб-сервера и PHP на повторные ошибки и системный журнал на убийство процессов по OOM. Если потребление растёт при каждом запросе, ищите утечку в коде и расширениях, а не бесконечно повышайте лимит.

#На что обратить внимание

Не ставьте memory_limit=-1 на публичном сайте как универсальное решение: это может исчерпать RAM при параллельных запросах. Для пакетных задач используйте обработку порциями и CLI.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.