Как увеличить память PHP при ошибке «PHP Fatal error: Out of memory»
Проблема
Ночью при модерации комментариев на сайте я увидел вместо панели администратора страницу ошибки со строкой примерно такого вида:
*PHP Fatal error: Out of memory (allocated 49545216) (tried to allocate 77824 bytes) in /home/xxxxx/public_html/xyz/admin.php(1758) on line 40*
Это означает, что PHP-скрипт потребовал больше оперативной памяти, чем ему разрешено в настройках (memory_limit).
Быстрое решение (временное)
Перезапуск веб-сервера (например, Apache httpd) иногда сразу решает проблему, потому что освобождает память. Это, однако, не устраняет первопричину.
Подробное руководство — 4 распространённых способа увеличить память
- Изменить php.ini
- Найдите активный php.ini. Чтобы точно узнать, какой php.ini читает PHP, создайте файл в корне сайта (например, check.php) с содержимым:
Откройте этот файл в браузере и посмотрите путь к Loaded Configuration File. Обычно это что-то вроде /usr/local/lib/php.ini.
- В текстовом редакторе (рекомендуется не простой Notepad на Windows) откройте php.ini и найдите параметр memory_limit. По умолчанию он может быть
8M
.
Пример изменения:
memory_limit = 32M
Повышайте значение по необходимости: 12M → 16M → 24M → 32M и т.д. После изменения перезапустите веб-сервер.
- Установить лимит в самом скрипте
Если вы не можете править общесистемный php.ini, добавьте в начало проблемного PHP-файла (например, admin.php) строку:
ini_set('memory_limit', '32M');
Это влияет только на текущий процесс PHP и удобно для быстрого теста.
- Правка .htaccess
Если у вас есть доступ к .htaccess
(Apache с модулем mod_php), можно добавить:
php_value memory_limit 32M
Обратите внимание: на некоторых хостингах (FastCGI, PHP-FPM) директивы в .htaccess не работают.
- Для WordPress: wp-config.php
Добавьте или измените строку в wp-config.php
:
define('WP_MEMORY_LIMIT', '32M');
Это удобно для сайтов на WordPress и часто достаточно для плагинов/тем, которым нужно больше памяти.
Что делать, если не помогло
- Убедитесь, что редактируете именно тот php.ini, который используется (см. phpinfo()).
- На виртуальном или выделенном сервере проверьте, не ограничивает ли память сам контейнер/виртуальная машина или системные лимиты (ulimit).
- На общих хостингах провайдер может принудительно ограничивать память — обратитесь в поддержку.
Как понять, какой скрипт потребовал память
Анализ может быть нетривиален. Начните с логов веб-сервера и PHP (error_log). Если в сообщении есть путь и номер строки — это указывает на проблемный файл.
Советы по диагностике:
- Включите логирование ошибок и увеличьте детализацию (display_errors=Off, log_errors=On, error_reporting = E_ALL).
- По возможности профилируйте скрипт (Xdebug, Blackfire, Tideways) — это покажет утечки и «тяжёлые» функции.
- Ищите длинные циклы, рекурсию или создание больших массивов/объектов.
Практические шаблоны и сниппеты
Частые значения для теста:
- Малые сайты: 16M–32M
- CMS (WordPress, Drupal): 64M–128M
- Сложные приложения/импорт: 256M и больше
Код для временного увеличения только для CLI-скрипта:
// В начале long-running скрипта для CLI
ini_set('memory_limit', '-1'); // отключить лимит памяти (только с осторожностью)
Важно: отключать лимит (-1) можно временно в контролируемой среде; на продакшене это может привести к исчерпанию ОЗУ.
Ментальные модели и эвристики
- Если ошибка повторяется при одинаковом действии — это признак того, что конкретный код выделяет много памяти.
- Растущие мем-сниффы при длительных процессах часто указывают на утечку (неосвобождённые ссылки на объекты).
- Увеличение лимита — временная мера; идеальная цель — оптимизация кода.
Критерии приёмки
- Ошибка «Out of memory» больше не появляется при том же сценарии.
- Память увеличена минимально необходимым образом (не более чем требуется).
- Нет деградации работы сервера: свободная память и swap в норме.
- Логи не содержат новых критичных ошибок.
Контрольный чеклист для администратора
- Проверил active php.ini через phpinfo()
- Изменил memory_limit и перезапустил сервис
- Проверил логи PHP и веб-сервера
- Протестировал функциональность, вызвавшую ошибку
- Если на хостинге — связался с поддержкой при неудаче
Когда увеличение памяти не помогает (контрпример)
- На shared-хостинге провайдер может игнорировать пользовательские настройки и ограничивать процессы целиком.
- Проблема может быть не в лимите, а в бесконечной рекурсии или ошибке, создающей гигантский массив — тут поможет профилирование.
Быстрый план действий (мини-SOP)
- Воспроизведите ошибку и сохраните текст сообщения.
- Посмотрите phpinfo() — определите конфигурацию.
- Попробуйте временно ini_set(‘memory_limit’, ‘32M’).
- Если помогло — примените решение в php.ini или .htaccess.
- Запустите профайлер для долгосрочной оптимизации.
Факто-бокс
- Стандартный memory_limit на старых сборках PHP — 8M.
- Современные CMS обычно требуют минимум 64M–128M для стабильной работы.
Резюме
Ошибка “PHP Fatal error: Out of memory” обычно решается увеличением параметра memory_limit в php.ini, через ini_set(), .htaccess или wp-config.php. Если после изменения лимита проблема остаётся, потребуется анализ кода и/или обращение к хостеру.
Важно: увеличивать лимит нужно разумно и параллельно исследовать корень проблемы — утечку памяти или неэффективный алгоритм.
Image Courtesy: Clarkandransom
Похожие материалы

Скачать фильмы и сериалы Netflix офлайн

Как добавить сайты в Flash whitelist на Windows RT

Запуск Photoshop CS5 в Ubuntu 10.10

Как скачать фильмы и сериалы Netflix

Как исправить: Firefox уже запущен, но не отвечает
