Клиент получил письмо счастья от хостера:
Здравствуйте! На вашем сайте было зафиксировано серьёзное превышение лимитов по нагрузке. Максимально дпустимая нагрузка по вашему тарифу 65 CP.
Примитивный сайт на WordPress с посещаемостью менее 100 в сутки. Откуда нагрузка и как бороться?
Первое что стоит посмотреть, это график нагрузки. У приличных хостеров он есть в панели, у не очень приличных, график нагрузки присылают в письме счастья. У хостинга Бегет в панели график выглядит так
Четко видны дни, когда нагрузка превышала допустимые значения. У Бегета есть возможность посмотреть и график нагрузки по часам.
Второй шаг, это изучение логов. С удивлением обнаружил что в нагрузка растет при обращениях к wp_cron.php . Этот скрипт выполняет функцию планировщика в WordPress. Публикует отложенные посты, чистит кеш, отправляет почту и т.п.
В логах это выглядит как то так
1 2 3 4 5 |
xxxxxx.ru 2a03:6f00:1::5c35:72aa - - [20/Jun/2017:17:17:20 +0300] "POST /wp-cron.php?doing_wp_cron=1497968240.6339199542999267578125 HTTP/1.0" 200 228 "http://xxxxxx.ru/wp-cron.php?doing_wp_cron=1497968240.6339199542999267578125" "WordPress/4.8; http://xxxxxx.ru" xxxxxx.ru 2a03:6f00:1::5c35:72aa - - [20/Jun/2017:17:18:35 +0300] "POST /wp-cron.php?doing_wp_cron=1497968315.4960770606994628906250 HTTP/1.0" 200 - "http://xxxxxx.ru/wp-cron.php?doing_wp_cron=1497968315.4960770606994628906250" "WordPress/4.8; http://xxxxxx.ru" xxxxxx.ru 2a03:6f00:1::5c35:72aa - - [20/Jun/2017:17:21:47 +0300] "POST /wp-cron.php?doing_wp_cron=1497968507.6124451160430908203125 HTTP/1.0" 200 - "http://xxxxxx.ru/wp-cron.php?doing_wp_cron=1497968507.6124451160430908203125" "WordPress/4.8; http://xxxxxx.ru" xxxxxx.ru 5.101.6.130 - - [20/Jun/2017:17:21:47 +0300] "POST / HTTP/1.0" 200 184406 "http://xxxxxx.ru/sh404sef-custom-content/__404__/Page-972" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" xxxxxx.ru 2a03:6f00:1::5c35:72aa - - [20/Jun/2017:17:21:47 +0300] "POST /wp-cron.php?doing_wp_cron=1497968507.6299650669097900390625 HTTP/1.0" 200 - "http://xxxxxx.ru/wp-cron.php?doing_wp_cron=1497968507.6299650669097900390625" "WordPress/4.8; http://xxxxxx.ru" |
Конечно можно вообще заблокировать wp_cron. Но это приведет к частичной потере функционала сайта. Лучший вариант, запускать wp_cron.php по расписанию, средствами сервера.
Вначале выключаем запуск через http добавив в wp_config.php строку define('DISABLE_WP_CRON', true);
Затем добавляем в планировщик задач хостинга строчку.
1 |
*/10 * * * * /usr/bin/php /var/site/wp-cron.php /dev/null 2>&1 |
В данном примере планировщик будет запускать скрипт каждые 10 минут. Этого вполне достаточно чтобы скрипт не нагружал сервер и при этом WordPress функционировал в полном объеме
Свежие комментарии