После обновления PHP-сайт выдаёт Allowed memory size exhausted

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

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

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

В этой статье
  1. Симптомы, область применения и причины
  2. Безопасная диагностика и пошаговое исправление
  3. Как проверить результат и что делать дальше

#Симптомы, область применения и причины

После обновления темы, модуля или PHP сайт перестал открывать отдельные страницы с Fatal error: Allowed memory size exhausted. Как отличить рост расхода памяти от неверного memory_limit и исправить причину. В отличие от общей ошибки лимита памяти, здесь важно сравнить поведение до и после конкретного обновления: новый код, запросы к БД, размер выгружаемых данных и настройки того PHP, который обслуживает сайт.

Возможная причинаКак узнатьЧто делать
В обновлённом коде выросло потребление памятиНовый импорт, создание миниатюр или выборка всех записей загружает большой массив в память.Ошибка возникает только на новой странице или во время определённой операции; разные величины «tried to allocate».Сузить операцию до одной выборки и проверить изменения версии.
Сменился активный php.ini или пулCLI и PHP-FPM читают разную конфигурацию, а после обновления сайта мог измениться обработчик.В терминале memory_limit высокий, а HTTP-запрос падает при прежнем лимите.Найти эффективный лимит именно через запрос сайта, затем изменить нужную конфигурацию.
Сервис упирается в память сервераРост количества воркеров и объёма каждого процесса приводит к нехватке ОЗУ, независимо от PHP-лимита.В системных журналах есть OOM-killer, процессы аварийно завершаются.Измерить расход памяти, не повышать лимит вслепую.

#Безопасная диагностика и пошаговое исправление

  1. Зафиксируйте исходную ошибку и момент обновленияОткройте проблемную страницу в отдельном окне, запишите адрес, время и операцию (например, «сохранить карточку товара»). В панели размещения откройте журналы ошибок PHP; если панели нет, подключитесь к серверу по SSH и посмотрите error_log сайта, путь которого указан в настройках виртуального сервера или пула PHP-FPM. Ищите точную строку Allowed memory size of ... bytes exhausted (tried to allocate ... bytes) и указанный файл со строкой. Не включайте показ ошибок посетителям: в журнале могут быть внутренние пути и сведения приложения.
  1. Сравните с работающей страницей и определите изменениеНа том же сайте выполните простое действие без загрузки больших данных и сравните время, число записей и используемые изображения. В истории развёртываний найдите дату выпуска новой версии и список изменённых модулей. Если ошибка началась после добавления импорта, ограничьте тест несколькими строками; если даже главная страница падает, проверьте новый обработчик PHP. Не удаляйте обновлённые файлы, пока не сохранена резервная копия.
  1. Определите эффективный лимит веб-запроса, а не только терминалаВ панели хостинга откройте параметры PHP конкретного домена и найдите memory_limit; отдельно проверьте переопределение в пуле FPM, .user.ini и вызовы ini_set. Разработчик может временно добавить в закрытый диагностический маршрут ini_get("memory_limit"), ограничив доступ администраторам; после проверки его следует убрать. Если изменения в CLI не совпадают с браузером, это нормальный признак разных конфигураций, а не повод менять все найденные php.ini сразу.
  2. Пример кода по теме
    PHP
    Вставьте на время в обслуживаемый путь приложения, запустите только авторизованный тест и проверьте серверный журнал. Не показывайте эти сведения публично.
    <?php
    // Запускать только в закрытом диагностическом маршруте; затем удалить.
    error_log('effective memory_limit: '.ini_get('memory_limit'));
    error_log('peak bytes: '.memory_get_peak_usage(true));
  1. Измерьте рост памяти на конкретной операцииВ тестовой среде запустите проблемное действие с контрольным объёмом данных. Добавьте журналирование memory_get_usage(true) до и после чтения данных, построения изображения или сериализации ответа. Числа в байтах позволят найти участок с резким ростом. Для массива, содержащего все строки таблицы, применяйте порционную обработку (пагинацию, итераторы); для изображений проверяйте разрешение в пикселях, а не только размер файла. Если память растёт даже на пустом наборе, сопоставьте вызовы новых плагинов.
  1. Проверьте свободную память сервера до изменения ограниченийПодключитесь по SSH; откройте терминал, например PowerShell на Windows, и введите ssh пользователь@сервер с вашими реквизитами. На сервере выполните free -h: это просмотр состояния памяти и подкачки, права администратора не нужны. Параметр -h показывает понятные единицы. Если доступной памяти мало либо в журнале есть записи об убийстве процессов по OOM, сначала снизьте параллельность тяжёлых задач и выясните нагрузку, иначе повышение memory_limit ухудшит ситуацию.
    Linux · Терминал (Bash)Только проверка
    Команда выполняется на Linux-сервере по SSH. Сравнивайте колонку available, а не только free.
    free -h
  1. Исправьте причину в новой версии до повышения memory_limitЕсли после обновления приложение запрашивает всю таблицу, ограничьте объём выборки и выполняйте обработку порциями. Если цикл накапливает промежуточные объекты, освобождайте их по завершении обработки и не сохраняйте большие копии массива. Изменения вносите через репозиторий или тестовую копию, сначала сохраните файлы и данные. Проверьте пробный запрос; если он опять падает на той же строке, вернитесь к измерению пиков, а не повышайте лимит бесконечно.
  1. Точечно скорректируйте лимит только при подтверждённой необходимостиКогда расчётный пик находится немного выше текущего предела и на сервере достаточно ОЗУ, в панели домена или активном пуле укажите разумное значение memory_limit (например, переход 128M → 256M только для этого сайта). Сохраните прежнее значение. Для PHP-FPM запросите проверку конфигурации соответствующим исполняемым файлом версии и плавную перезагрузку только этой службы; в панели используйте штатное применение настроек. Для PHP 8.5 учитывайте возможные дополнительные верхние ограничения max_memory_limit, заданные администратором.
  1. Повторите операцию и предусмотрите откатОбновите проблемную страницу, выполните исходное действие с тем же количеством данных и найдите отсутствие новой записи Fatal error. Сравните время ответа и пиковую память, затем выполните ещё один запрос на фоне обычной нагрузки. Если память всё равно растёт, восстановите прежний memory_limit и предыдущую стабильную версию проблемного модуля из проверенной резервной копии; зафиксируйте точные строки ошибок для разработчика.

#Как проверить результат и что делать дальше

Успех — воспроизводимая операция завершается без Fatal error, пик памяти не приближается к новому лимиту, в журнале нет OOM. При повторном переполнении сохраните лог со временем и именем файла без персональных данных, верните прежние параметры и передайте разработчику замеры. Изменение памяти в CLI само по себе ничего не доказывает о PHP-FPM.

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

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

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