Как узнать из-за чего внезапная нагрузка на сервер?
Добрый день, уважаемые коллеги!
На проекте работает сервер. В нормальном состоянии нагрузка процессора колеблется в районе 8-10% (брали с запасом). Посещаемость проекта пока что небольшая и одновременно на сайте находится не более 1000 человек. Вдруг, внезапно возрастает нагрузка до 100% на все 8 ядер. Лечиться многократным (до 5 раз) перезапуском Apache2. Такое происходит один раз в день, в разное время. Иногда 300 человек на сайте, иногда 1000. Но это ненормально. Я не прошу проявлять чудеса телепатии и строить догадки на очень скудной информации. Подскажите, пожалуйста, куда смотреть? Опыта мало, поэтому плохо понимаю, с чего вообще начать.
AndreyBerezov: Apache - это (как я и предполагал) "дверь" к проблеме, т.к. пользователи заходят через Apache, Apache - запускает серверный скрипт, скрипт подключается к MySQL... который в итоге и создаёт проблему.
Основные причины, по которым такое может происходить:
а) у Вас криво настроен MySQL
б) кто-то парсит Ваш сайт (или DDoS какой-то лёгкий, уровня "веб-сервер", что по сути аналогично парсингу в некоторой степени). Этим "кто-то" может быть в т.ч. поисковый бот, т.к. не настроена периодичность между запросами для поисковых роботов.
в) Сочетание причин А и Б
Как исправить:
1. Понизить приоритет для MySQL (плохое решение, но иногда помогает)
2. Настроить MySQL таким образом, что бы он адекватно расходовал ресурсы машины
3. Обязательно посмотреть логи сервера в момент нагрузки, кто, с какого IP и что пытается загрузить, возможно выдать бан на IP/подсеть, что бы такого не было (если Вы точно уверены, что это именно зловред)
4. Использовать Varnish (разумеется, предварительно его хорошенько поднастроив)
P.S. Перезапуск Apache - просто не позволяет "кому-то" создавать нагрузку на MySQL, в виду чего проблема и прекращается. Судя по симптомам, это кто-то парсером балуется.
access.log смотреть. Может атакуют сервер, а может просто какой-то кривой php-скрипт выполняется.
awstat попробуйте отключить, если используется.
Может ещё баг в cms быть. Проверять нужно версию и её известные проблемы.
Во время загрузки CPU смотрите командой top на сервере, какой процесс грузит систему. Начать можно с этого.
1. че грузит i-o iotop -oka
как правило тут уже и будет твой ответ.
2. htop - че по загрузки проца.
3. че по загрузки памяти.
4. mytop - или графики в phpmyadmin - они там есть.
Смоири на висящие транзакции, если они есть то это бд уже тормозит.
5. Запусти html -посомтри скорость построения дом модельи
6. запусти php скрипт, скорость дом модели
7. инициализируй ядро , скорость
8. футер+ хедер +ядро , скорость
9. подключи каталог сравни.
В 99% случаях этого хватает.
ps. надеюсь предкеш php у тебя включен, какой движок