Уменьшаем количества обращений к серверу с помощью Heartbeat Control

веб-ресурс много жрёт на сервере Создать данный пост меня заставила проблема, которая все настойчивее стала стучаться на мой сайт. Проблема — открытие страниц сайта и работа в админпанели.  Они  стали настолько сильны и часты, что стало затруднительным составить даже небобольшое сообщение. Соединение с сервером постоянно пропадало. Высокая нагрузка на CPU, а значит превышение так называемого мягкого лимита происходила постоянно; на почту очень часто стали проиходить сообщения от Метрики и плагина Jetpack, о том что сайт часто бывает недоступен, даже в тот момент, когда я в нем не работал. Короче — ужас ужасный снова настиг меня на проблеме скорости работы сайта. И я снова обратился в службу подержки на своем хостинге «Джино»

Ответ пришел незамедлительно, а при дальнейшем диалоге с небольшими пояснениями, я понял суть проблем и смог их исправить.

Поддержка хостинга прежде всего обратила мое  внимание на большое количество обращений к /wp-admin/admin-ajax.php.  «Обращения создают действия в административной панели сайта. Такое поведение в ней характерно, если какой-то из плагинов работает не корректно. Отключайте плагины сайта по очереди и следите за его работой. Обнаружив проблемный плагин, попробуйте его обновить или установить стабильную версию, или замените аналогом, с которым не возникает проблем».

Плагинов на моем сайте установленно довольно много и проверять каждый в отдельности очень проблематично. Поэтому я обратил внимание на ссылку, которую мне оставили из техподдержки на плагин Heartbeat Control. Его установка и некоторые другие настройки решили мою проблему!

Служба техподдержки так же обратила на еще одну проблему и предложила провести некоторые действия в коррекции кода в файле wp-cron.php. Но об этой проблеме в конце сообшения.

Ну а теперь давайте перейдем к сути вышесказанного.

 Что такое Heartbeat API на  WordPress и как его ограничить

"Heartbeat" перводится как "Сердцебиение"

Слово «Heartbeat» переводится как «Сердцебиение» и назван он так для API не зря. Она обеспечивает определенную частоту запросов к серверу. По умолчанию и в зависимости от страницы админпанели, это происходит  с разными интервалами: при редактировании записей — каждые 15 сек, при работе в Консоли — одну минуту. WordPress Heartbeat API — это функция, которая обеспечивает:

  • Автосохранение при создании сообщений;
  • Блокировки записей или страниц для других редакторов сайта, пока запись или страницу редактирует один человек;
  • Обновление информации о том, что пользователь всё ещё находится в административной части (консоли или на странице редакции записей).

Данная функция, прописанная в движке WordPres очень важна, особенно тогда, когда на сайте могут работать несколько авторов и администрирование бывает коллективным. Однако она же может стать причиной «торможения» сайта и значительного увеличения нагрузки на сервер.

Если вы являетесь единственным автром сайта, то функцию Heartbeat API можно либо полностью отключить, либо настроить на удобный вам режим, позволяющий регулировать нагрузку на сервер.

Полное отключение Heartbeat API

Этот жесткий сценарий, который я не пожелал сделать, заключается в том, что нужно проделать некоторую операцию в файле functions.php вашей темы, установленной в данный момент на сайте.

Как рекомендуют некоторые вебмастера, в самом начале этого файла, после тега <?php с новой строки нужно установить следующий код:

add_action('init', 'stop_heartbeat', 1);
function stop_heartbeat() {
 wp_deregister_script('heartbeat');
 }

Разумеется, при обновлении этой темы или ее замены на другую, придется эту операцию делать заново.

Плагин Heartbeat Control и его настройки

Настроек всего и две и, несмотря на то, что плагин на английском, для незнающих этот язык, не трудно будет в них разобраться. Напомню, что настройка плагина по умолчанию (use default) означает, что Heartbeat API не отключен ни на одной из страниц, а интервал запросов к серверу — 15 сек. То есть все выглядет так, словно этого плагина на вашем сайте нет.

4. Использование настроек  для страниц админпанели

настройки для страниц Heartbeat ControlДля ясности делаю пояснения:

1.  use default — использовать Heartbeat API по умолчанию;
2. disable everywhere — отключить Heartbeat API  везде;
3. disable on dashboard page — отключить Heartbeat API  на приборной страницe (консоль);
4. allow onli от post edit pages — использовать Heartbeat API только при редактировании страниц.

2. Корретировка частоты запросов к серверу

Тут все очень просто. Нужно лишь выбрать подходящий интервал запросов к северу. Чем реже «пульс» — тем реже запросы — тем меньше нагрузка на сервер.

корректировка таймера запросовПосле совершения настроек сохраняем измения.

Поскольку автоматическое сохрание сохрание записей во время их редактирования остается желанной функцией (удалить лишние редакции можно потом чисткой специальными плагинами), а потерять почти завершенную запись по каким-либо техническим причинам неприятно (пропал интернет или связь с сервером и т. п.) очень нежелательно. Поэтому настройку для перврого блока вполе можно установить в режим  «use default» но вполне достаточно будет сделать настройки во втором блоке, так как установка таймера частоты запросов к файлу admin-ajax.php. в 60 сек. сократит расход ресурсов на данные запросы на целых 75%!

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

В начале статьи я упомянул о том, что работники поддержки обратили мое внимание еще на одну причину сложности в работе моих сайтов. Причина —

 Нежелательные процессы в файле wp-cron.php

Техподдержка в результате исследований работы моих сайтов, обратила внимание, что на них «наблюдаются процессы wp-cron.php».  Они рекомендовали: «Если выполнение этого файла вызывает нездоровую нагрузку на сервер — можно отключить эти задачи».

  1. Для этого в файл конфигурации WordPress wp-config.php добавляем строку:
    define(‘DISABLE_WP_CRON’, ‘true’);
    Добавить её можно где-то после установки языка, т.е. после строки
    define(‘WPLANG’, ‘ru_RU’);
  2. Другой вариант решения — в самом файле wp-cron.php закомментировать строку: wp-cron.php ignore_user_abort(true); Для этого перед ней нужно установить двойной слэш. Получится вот так: //ignore_user_abort(true); Находится данная строка в 12 ряду файла.

Это все, друзья.

LikesRock

2 комментариев “Уменьшаем количества обращений к серверу с помощью Heartbeat Control

  1. Надежда Хачатурова:

    Как интересно! Ни разу не возникало проблем с доступностью во время редактирования. Правда, у нас на Бегет Cron в панели управления вынесен отдельно. Значит, можно им управлять на сервере. А вот в файле config, помнится, у меня есть строка define(‘DISABLE_WP_CRON’, ‘true’); Даже не вникала, зачем это. Теперь буду вникать. Спасибо, Геннадий! Глядишь, и выучу матчасть. 🙂

  2. Геннадий Михайлюта:

    файл config редактируется при создании сайта и в нем указывается префикс, логин и пароль. Наверное Вам кто-то устанавливал блог на движке вордпресс, но не объяснил что да как.
    Моя проблема, как оказывается, так и не решилась полностью. Вот опять сейчас вошел, а на сервере показывает, что было много ошибок 503. Самое интересное, что происходит это периодически, спонтанно и проверить, какой плагин работает криво, очень сложно. Такуошибку исправлял, но вот она снова появилась. Похоже, что какой-то плагин при обновлении снова забарахлил. А может, он не один такой.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *