WordPress достиг предела памяти, но не из-за сервера

Вопрос или проблема

Я боролся с этим в течение часов и дней. Теперь мне нужны хорошие идеи для исправления.

Когда я выполняю определенное действие в WordPress, я иногда получаю фатальную ошибку памяти. Ошибка возникает после нажатия “Обновить” на метке/термине. Ошибка, похоже, связана с файлом ядра WordPress.

Скрипт, похоже, достиг предела памяти около 700 МБ:
https://www.screencast.com/t/i6USBKHuWcxS

Однако предел на сервере намного выше – 5096 МБ:
https://www.screencast.com/t/CyRJs8dohYYh

Наш администратор сервера подтвердил, что на их стороне мы не достигаем никаких пределов.

Что я попробовал:

  • Деактивировал все плагины и переключился на стандартную тему. Это решает проблему.
    • Однако: Невозможно определить проблему с единственным плагином. Разные сочетания плагинов дают ошибку.
  • Переход на PHP 7.1 решает проблему. Однако это не постоянное хорошее решение.

Может ли быть “ложный” предел памяти в каком-то скрипте, плагине и т.д.? Мы используем LiteSpeed Cache на сервере – не знаю, имеет ли это значение.

Буду признателен за любые идеи и предложения.

Сервер должен обслуживать много запросов одновременно, и чтобы предотвратить выход одного PHP-запроса из-под контроля, он устанавливает два лимита. Время и память. Если на генерацию запроса страницы уходит 2 часа, что-то пошло не так.

Если вашему запросу требуется бесконечное количество памяти, значит, что-то опять пошло не так. Эти проблемы могут привести к исчерпанию ресурсов и повредить способности сайта к масштабированию. Лимиты предоставляют страховой механизм для предотвращения катастрофы, избегания бесконечных циклов, отлова ошибок и т.д.

Обычно хороший объем памяти для сайта WordPress составляет менее 100 МБ, желательно менее 50 МБ. Стандартная установка WP без плагинов и с стандартной темой занимает около 4 МБ, а многие хорошо построенные сайты от 20 МБ.

Все, что выше 100, вызывает подозрения, а 700 МБ – это крайне высокое значение. Ваш сайт либо делает слишком много, делая вещи, которые ему не нужны, либо имеет ошибки. Это может быть ваша тема, плагин или сочетание нескольких факторов. Это не обязательно должно быть одной единственной причиной, это может быть множество вещей, складывающихся вместе.

Новые версии PHP помогут смягчить проблему, но повышение лимита памяти в php.ini – это лишь временное решение для большинства, которое не исправляет реальную проблему, которую вы еще не нашли.

Вам нужно получить копию вашего сайта и попытаться получить больше информации о его работе.


Ошибка, похоже, связана с файлом ядра WordPress.

Нет, это всего лишь то, что происходило, когда у вас закончилась память.

Это немного похоже на сцену из Монти Пайтона, где мистер Креосот съел все в ресторане и ему предложили тонкий мятный леденец, после чего он взорвался, съев его. Это не был мятный леденец, который это сделало, это была гора еды. Так же ни один отдельный кусок пищи не был ответственным, это был совокупный объем.

Скрипт, похоже, достиг предела памяти около 700 МБ:

700 – это очень много!

Однако: Невозможно определить проблему с единственным плагином. Разные сочетания плагинов дают ошибку.

У вас слишком много всего, избавьтесь от некоторых вещей или замените их на более легкие. Query Monitor может помочь вам измерить использованную память.

Переход на PHP 7.1 решает проблему. Однако это не постоянное, хорошее решение.

На самом деле, это отличный шаг, но вы не сделали достаточно. PHP 7.1 устарел и не поддерживается, вам следует перейти на PHP не ниже версии 7.4 или новее.

Однако предел на сервере намного выше – 5096 МБ.

Вы никогда не захотите, чтобы один запрос использовал все это.

Но имейте в виду, что просто потому, что сервер имеет выделенные 5096 МБ ОЗУ, не значит, что PHP настроен на их использование. Лимит памяти PHP независим от аппаратного обеспечения, и вы хотите этого, так как есть несколько процессов PHP, обрабатывающих запросы. Никто не хочет, чтобы их сервер обрабатывал лишь 1 посещение одновременно!

Ответ или решение

Проблема, с которой вы столкнулись, связана с превышением лимита памяти в WordPress, и это может быть вызвано несколькими факторами. Давайте разберем возможные причины и решения более подробно.

Возможные причины проблемы

  1. Избыточное использование памяти: На вашем сайте при выполнении определённых операций (например, обновление тегов или терминов) происходит использование слишком большого объема памяти (700 МБ), что является аномально высоким для WordPress. Стандартный сайт без плагинов и с темой по умолчанию занимает около 20 МБ.

  2. Конфликт плагинов: Поскольку проблема исчезает при отключении всех плагинов и при использовании стандартной темы, это указывает на возможный конфликт между плагинами или ненадёжные плагины. Ваша гипотеза о "поддельном" лимите памяти может быть связана с тем, как работают плагины или скрипты в вашем WordPress.

  3. Версия PHP: Вы отметили, что использование PHP 7.1 уменьшает проблему. Однако версия 7.1 устарела, и переход на более новую версию, например, 7.4 или 8.0, может значительно улучшить производительность и управление памятью.

Рекомендации по решению проблемы

  1. Обновите PHP: Обратите внимание на возможность обновления вашей версии PHP до 7.4 или даже 8.0. Это не только улучшит производительность, но и уменьшит потребление памяти благодаря оптимизациям, введенным в новых версиях.

  2. Профилирование сайта: Используйте плагины, такие как Query Monitor, чтобы анализировать использование памяти различными плагинами и темами. Это поможет вам выявить, какие именно компоненты сайта используют наибольшее количество памяти.

  3. Оптимизация плагинов: Проверьте каждый плагин отдельно. Вы можете отключать их по одному и тестировать, чтобы определить, какой из них вызывает проблему. Рассмотрите возможность замены ресурсоёмких плагинов на более легкие альтернативы.

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

  5. Настройки сервера: Убедитесь, что настройки вашего сервера оптимизированы для работы с WordPress. Иногда в php.ini необходимо установить лимит памяти, больший, чем в настройках WordPress.

  6. Кэширование: Использование кэширования может значительно снизить нагрузку на сервер. Если вы используете LiteSpeed Cache, убедитесь, что его настройки оптимизированы для вашего сайта.

Заключение

Ваша проблема с превышением лимита памяти в WordPress, скорее всего, связана с конфликтами между плагинами или избыточным использованием ресурсов. Рекомендуется провести профилирование сайта, обновить версию PHP, оптимизировать и, возможно, заменить плагины, а также рассмотреть возможности для кэширования. Если эти шаги не решат проблему, может потребоваться более глубокий анализ кодов тем и плагинов, используемых на сайте.

Оцените материал
Добавить комментарий

Капча загружается...