Описать проблему ↗

Сбои и доступность

Allowed memory size exhausted: PHP не хватает памяти

PHP пишет Allowed memory size exhausted. Разберём, почему запросу не хватает выделенной памяти и когда увеличение лимита только откладывает ошибку.

Редакция «починимсайт» · Обновлено · 3 мин. чтения

Что происходит и с чего начать

Сообщение означает, что конкретное выполнение PHP достигло ограничения памяти. Это не обязательно означает, что весь сервер физически исчерпал память. Один запрос мог попытаться загрузить слишком много данных или обработать большое изображение. Начните с действия, которое вызывает отказ, и его объёма. Важно сравнить маленький и обычный набор данных. Если расход растёт без разумного предела, увеличение лимита позволит обработать чуть больше, но не устранит причину и может повлиять на другие процессы.

Что можно проверить самостоятельно

  1. Запишите действие, размер файла или число обрабатываемых записей и текст ошибки. Укажите, проходит ли меньший объём и на каком примерно размере начинается отказ.
  2. Уточните, выполняется задача через страницу, очередь или команду. Эти процессы могут использовать разные настройки PHP, поэтому изменение одного лимита не обязательно затронет проблемный запуск.
  3. Проверьте, возникает ли отказ после роста данных или недавней доработки. Не повторяйте тяжёлый экспорт многократно параллельно: это увеличит общую нагрузку и усложнит наблюдение.

Как понять результаты проверки

Специалист исследует, какие данные удерживаются в памяти и можно ли обрабатывать их частями. Для изображений оценивают разрешение и используемую библиотеку, для выборок — объём загруженных объектов. Лимит может быть действительно слишком мал для допустимой задачи, но новое значение должно учитывать число одновременных процессов. Иначе несколько исправно работающих тяжёлых запросов вместе исчерпают сервер. В отчёте полезно показывать максимальный расход памяти до и после на сопоставимом объёме, а не только успешный запуск один раз.

Что проверяет разработчик

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

  1. Запишите файл, действие и объём данных при ошибке. Сравните маленький импорт и полный каталог, одну страницу и массовую операцию.
  2. Проверьте, не загружаются ли все записи и отношения в память одновременно. Большие изображения и распаковка архивов требуют отдельной оценки.
  3. Сверьте лимит для веба и CLI, а также общую память сервера. Ошибка PHP отличается от завершения процесса системой из-за общей нехватки ресурсов.

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

Чтение всего каталога в массив может работать на тестовых данных и падать на рабочем объёме. Простое удвоение лимита не меняет характер роста потребления.

Как исправляют причину

Обрабатывайте данные порциями или потоком, освобождайте промежуточные структуры и исключайте ненужные поля. Лимит повышайте только после оценки пикового потребления и числа параллельных процессов.

Как убедиться, что проблема решена

Повторите операцию на полном безопасном наборе данных. Измерьте максимальную память и проверьте, что обработаны все записи, включая последнюю порцию.

Повторите исходный объём и проверьте полноту результата: все строки отчёта, корректное изображение или весь набор импортированных записей. Затем оцените обычную параллельную работу. Если задача теперь выполняется частями, проверьте продолжение после сбоя и отсутствие пропусков. Устранение ошибки памяти не должно незаметно сокращать данные или создавать незавершённые результаты без понятного статуса для пользователя.