WordPress Memory exhausted — увеличение лимита памяти
Что будет, если не увеличить память
Сайт просто не откроется на странице, которая вызвала ошибку. Админка WordPress может работать частично — одни страницы открываются, другие выдают белую страницу или 500-ю ошибку. Плагины отключаются автоматически, если превысили лимит.
Без увеличения memory_limit теряются лиды: посетитель видит пустую страницу вместо контактов, корзины или оформления заказа. Особенно критично для WooCommerce — процесс покупки обрывается на полпути.
Почему WordPress жрёт память
1. Тяжёлые плагины. Один WooCommerce с 15–20 плагинами легко съедает 128–256 MB. Каждый плагин загружает свои классы, хуки, скрипты и стили даже на страницах, где они не нужны. Page Builders (Elementor, WPBakery, Divi) особенно прожорливы — их конструкторы хранят в памяти всё дерево блоков.
2. Крупные изображения без оптимизации. При загрузке фото через медиатеку PHP ресайзит оригинал в несколько размеров (thumbnail, medium, large). JPEG на 10–15 МБ без сжатия может съесть 50+ MB только на ресайз. Если изображений 10 — память кончится гарантированно.
3. Плохой код в functions.php. Кривой хук, повешенный на init или wp_loaded, может грузить в память всю БД или делать тяжёлые запросы на каждой странице. Особенно опасны парсеры CSV/XML, которые висят в теме.
4. Устаревшая версия PHP. PHP 7.4 ест на 20–30 % больше памяти на те же операции, чем PHP 8.2. На Reg.ru по умолчанию может стоять 7.4 — это самая частая причина ошибки на старых сайтах.
5. Утечки памяти в плагинах. Некоторые плагины не освобождают память после выполнения — глобальные переменные, кэш в памяти, замыкания. С каждым запросом потребление растёт, пока не упрётся в лимит.
Как исправить
Способ 1: wp-config.php (рекомендую)
Откройте wp-config.php в корне сайта. Добавьте перед строкой /* That is all, stop editing! */:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
WP_MEMORY_LIMIT — для фронтенда (посетители). WP_MAX_MEMORY_LIMIT — для админки (редактор, плагины, импорт). Это самый надёжный способ, работает на любом хостинге, где есть WordPress.
Способ 2: php.ini
Создайте или отредактируйте php.ini в корне сайта (рядом с index.php):
memory_limit = 256M
На Beget этот файл уже есть в папке — откройте через файловый менеджер и измените значение. На Timeweb может потребоваться создать через панель: хостинг → управление PHP → php.ini. На Reg.ru — через раздел «Настройка PHP».
Способ 3: .htaccess
Добавьте в корневой .htaccess выше # BEGIN WordPress:
php_value memory_limit 256M
php_value в .htaccess не работает — Nginx не читает .htaccess. Используйте wp-config.php.Способ 4: Панель хостинга
- Beget: Управление сайтами → ваш сайт → Версия PHP → Настройка → memory_limit → выберите 256M
- Timeweb: Сайты → ваш сайт → Управление PHP → memory_limit → 256M
- Reg.ru: Хостинг → Управление → Настройка PHP → memory_limit → 256M
На Beget максимальное значение на тарифе Старт — 128M, на Среднем — 256M, на VPS — без ограничений.
Проверка результата
- Создайте файл
info.phpв корне сайта с содержимым:
<?php phpinfo(); ?>
- Откройте
https://ваш-сайт.ru/info.phpи найдите строкуmemory_limit— она покажет текущее значение. - Обязательно удалите info.php после проверки. Это публичный phpinfo — злоумышленники увидят пути к файлам и версии модулей.
Как найти плагин-виновник, если память снова кончилась
Если после увеличения лимита ошибка возвращается — значит какой-то плагин утекает. Чтобы найти его:
- Установите плагин Query Monitor — показывает потребление памяти каждым плагином на странице.
- Откройте любую страницу сайта, где была ошибка. Query Monitor покажет список запросов и памяти.
- Плагин с наибольшим потреблением (500 KB+ на страницу) — кандидат на замену.
Если Query Monitor не ставится (сайт падает) — отключайте плагины по одному через FTP: переименуйте папку плагина в /wp-content/plugins/ и проверяйте страницу заново.
Когда способ не сработает
1. Жёсткий лимит хостинга. На дешёвых тарифах Beget maximum = 256M, выше не поднять. Timeweb на тарифе «Лёгкий старт» даёт всего 128M. Решение — перейти на тариф выше или VPS.
2. Плагин-утечка. Увеличение лимита маскирует проблему. Если через неделю ошибка вернулась — вы не починили причину. Ищите плагин через Query Monitor (см. выше).
3. Nginx + PHP-FPM. На VPS php.ini может лежать не в корне сайта, а в /etc/php/8.2/fpm/php.ini. Проверьте через: php --ini по SSH. Изменения требуют перезапуска PHP-FPM: sudo systemctl restart php8.2-fpm.
4. .user.ini вместо php.ini. Некоторые хостинги (Timeweb с PHP 8.x) читают .user.ini, а не php.ini в корне. Создайте оба файла для надёжности. На Beget .user.ini не работает — используйте php.ini из корня.
Частые вопросы
WordPress тормозит или падает?
Диагностика + исправление за 1 день. Без воды — только конкретика.