wordpress, хостер и чрезмерная нагрузка

Очень часто встречающаяся проблема сайтов сделанных на вордпресс — резкий скачок нагрузки и как следствие, жалобы со стороны хостера на превышение лимитов и возможное требование перехода на более высокий тариф.
wordpress нагрузка
Однако переход на более дорогой тариф не всегда решит эту проблему.

Нагрузку на хостинг могут создать:
1. увеличение количества посетителей вашего сайта, но это постепенный рост и его вы заметите всегда.
2. боты, индексирующие ваш сайт, яндекс и гугл основные, но и других еще очень много.
3. сам сайт тоже может являться причиной возросшей нагрузки.

Первый пункт разбирать нет смысла, это естественное развитие вашего сайта.
Про 2й и 3й поговорим, чтобы исключить возможные проблемы.

Пункт 2.
Многие статьи и посты на форумах пестрят сообщениями, что нужно блокировать ненужных ботов, допустим китайские поисковики или мелкомягкий (читать microsoft) msn-bot. Я не сторонник каких либо блокировок и прибегаю к ним только в крайних случаях.
Сначала попробуем сказать им индексировать помедленнее.
Открываем файл robots.txt в корне сайта и добавляем директиву crawl-delay всем «юзер-агентам». Выглядеть файл должен примерно так:

User-agent: Yandex
.....
Crawl-delay: 10

User-agent: *
.....
Crawl-delay: 10

Host:

Многие считают, что большинство ботов не воспринимают этой настройки, но на практике — воспринимают и учитывают!

Третий пункт есть смысл разделить, т.к. он включает несколько составляющих.
Пункт 3.1
404 ошибка
Практика показала, что отсутствие данного файла 404й ошибки в шаблоне создает нагрузку.
Причина — движок не находя файла 404.php в шаблоне, вместо него начинает использовать главную страницу сайта.
Например какой либо быстробот на подобии яндекса натыкается на несуществующую страницу и воспринимает ее как рабочую (отдается же главная) и начинает ее усиленно индексировать. Чтобы избежать ненужных проблем с нагрузкой и дублями обязательно проверьте наличие файла 404.php в папке вашего шаблона. Если его нет, то можно взять файл из любого стандартного шаблона либо создав вручную его с таким содержимым:

<?php get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<header class="page-header">
<h1 class="page-title">Ничего не найдено</h1>
</header>
</div>
</div>
<?php get_footer(); ?>

Пункт 3.2
База данных сайта.
Про этот пункт уже были пара примеров ТУТ и ТУТ
Это не единственные плагины не очень хорошо написанные. Таких много и они могу делать тысячу ненужных записей в базе, отчего она разрастается — соответственно обработка запросов становится более тяжелой для сервера на котором расположен ваш хостинг и сайт.
Откройте phpmyadmin из панели вашего хостинга. Затем выберите вашу базу и далее посмотрите внимательно на количество записей в каждой из таблиц, а так же на размер самих таблиц. Десятки и сотни мегабайт, а так же тысячи и десятки тысяч строк прописанных в них уже могут быть подозрительными.
Проанализируйте какая таблица от какого плагина и ищите информацию в интернете про ее размер.
Так же не лишним будет добавить в шаблон вывод статистики, подробно ТУТ.
Пункт 3.3
Ошибки и устаревшие функции
На этот пункт мало кто обращает внимания, отключая вывод ошибок, но я считаю его немаловажной частью возможной нагрузки и ее снижения.
Подробно про ошибки ТУТ
Про устаревшие функции вордпресс ТУТ, ТУТ и ТУТ.
Используем debug режим, в wp-config.php:

define('WP_DEBUG', true);

Пункт 3.4
wp-cron.php
После общения с хостером одного из клиентов, тот сообщил, что нагрузку так же создает файл wp-cron.php, запускаемый несколько десятков раз в минуту.
Вот лог который он предоставил:

.....
"POST /wp-cron.php?doing_wp_cron=1393286585.7043828964233398437500 HTTP/1.0" 200 - "-" WordPress/3.8.1;
.....
"POST /wp-cron.php?doing_wp_cron=1393286645.5777320861816406250000 HTTP/1.0" 200 - "-" WordPress/3.8.1;
.....
"POST /wp-cron.php?doing_wp_cron=1393286682.7845029830932617187500 HTTP/1.0" 200 - "-" WordPress/3.8.1;
.....
"POST /wp-cron.php?doing_wp_cron=1393286707.9214129447937011718750 HTTP/1.0" 200 - "-" WordPress/3.8.1;
.....

На просторах нашлось 2 решения:
a) Добавить в конфиг дополнительный таймаут

define('WP_CRON_LOCK_TIMEOUT', 3600);

Не пробовал, результата не знаю. Воспользовался вторым способом :)
б) Отключаем крон движка, добавляем в конец файла конфига

define('DISABLE_WP_CRON', true);

И настраиваем крон в панели хостинга. Создаем задание крон со следующей командой на выполнение 1 раз/час (рекомендуют 1 раз в 10-30 минут)

wget //ваш_домен.ru/wp-cron.php?doing_wp_cron=1 > /dev/null 2>&1

Итог:
Выполнение этих не сложных действий поможет справится с нагрузкой и избежать перехода на более дорогой тариф.
Конечно рекомендации в статье не являются панацеей от всех бед. Каждый сайт и его комплекс факторов, создающих нагрузку, уникальны. Но выполнение предложенных мер поможет избежать лишних проблем :)
нагрузка wordpress 2

Скажите свое мнение

ваш email не публикуется. обязательно *

;-) :yawn: :whew: :toivo: :tmi: :time: :thinking: :talking: :sweating: :swear: :sun: :star: :smoke: :smirk: :sleepy: :skype: :shock: :shake: :rofl: :rain: :punch: :puke: :poolparty: :pizza: :phone: :party: :oops: :nod: :no: :ninja: :neutral: :nerd: :music: :muscle: :mrgreen: :movie: :mooning: :mmm: :middlefinger: :makeup: :mail: :mad: :lol: :lipssealed: :kiss: :itwashtme: :inlove: :idea: :hi: :heidy: :heart: :headbang: :happy: :handshake: :giggle: :fubar: :flower: :evilgrin: :emo: :dull: :drunk: :drink: :doh: :devil: :dance: :cry: :cool: :coffie: :clapping: :cash: :call: :cake: :bug: :brokenheart: :bow: :blush: :beer: :bear: :bandit: :arrow: :angry: :angel: :^) :???: :?: :-| :-o :-P :-D :-) :-( :!:

 

*

code

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.