Назад | Перейти на главную страницу

Как найти причину роста нагрузки на сервер

У меня проблемы с загрузкой моего сервера, и, хотя я несколько опытный администратор Linux, у меня сейчас нет идей.

Проблема в том, что нагрузка на сервер медленно, но неуклонно увеличивается без какой-либо видимой причины.

Сервер представляет собой двухъядерный процессор AMD Athlon (tm) 64 X2 6000+ с 6 ГБ оперативной памяти. Он работает под управлением Debian Stable с Linux gir 2.6.26-2-amd64 # 1 SMP Wed Aug 19, 22:33:18 UTC 2009 x86_64 GNU / Linux.

Сервер в основном запускает Lighttpd, несколько процессов FastCGI PHP и базу данных MySQL. Типичные задачи веб-сервера.

ЦП никогда не используется полностью, а память в основном используется для буферов и кеша, и это нормально. Я попытался перезапустить различные службы, чтобы увидеть, снизит ли один из них нагрузку снова, но безуспешно.

Вот графика, показывающая нагрузку, CPU и IOStat:

Итак, вопрос: что могло вызвать медленно, но постоянно увеличивающуюся нагрузку? А как узнать, что в этом виновато?

Обновление: я забыл упомянуть, что когда я перезагружаю сервер, нагрузка упадет до 0,3–0,6 и снова начнет медленно расти в течение следующих недель.

Каждый зомби-процесс добавляет 1.0 к нагрузке. Возможно, вы видите скопление зомби.

Я нашел отличную подсказку в ответ на другой вопрос.

Поиск процессов в состоянии 'D' показывает четыре процесса PHP, которые, кажется, зависают довольно долгое время, что соответствует «шагам» на кривой нагрузки:

#> ps aux | awk '$8 ~ /D/  { print $0 }'
wiki      6651  0.0  0.0      0     0 ?        D    Oct04   0:41 [php-cgi]
bugs      6731  0.0  0.0      0     0 ?        D    Oct27   0:14 [php-cgi]
manpages  7536  0.0  0.0      0     0 ?        D    Oct30   0:21 [php5-cgi]
wiki     23847  0.0  0.0      0     0 ?        D    Oct06   1:32 [php-cgi]

Так что, похоже, это проблема. Теперь мне нужно выяснить, как эти процессы зависают, и как это исправить. Спасибо всем.

Я предполагаю, что на сервере не хватает ввода-вывода, возможно, вам стоит добавить статистику iotop в графики

Интересно, можно ли иметь активность io для каждого приложения, которая также является фактором нагрузки на сервер

http://rt.wiki.kernel.org/index.php/I/Otop_utility

другой инструмент - dstat

Если бы это был ввод-вывод, то он бы увидел iowait (розовый) на графиках процессора.

Проблемы такого рода часто возникают из-за того, что жесткий диск недостаточно быстр для обслуживания данных, необходимых для базы данных MySQL и HTTP-сервера. Вы должны посмотреть команду iostat

В общем, высокая загрузка сервера на самом деле неплохая вещь; это означает, что вы не сидите без дела и делаете меньше, чем могли бы. Обычно требуется загрузка 80% -90% вашей общей емкости (с некоторой "разорванной" комнатой). Я бы рекомендовал проверить вывод mpstat и vmstat. В частности, первые 2 числа из vmstat могут дать вам более значимую информацию о том, насколько вы «зарезервированы» с точки зрения процессов в очереди выполнения. Последний столбец («wa») вывода vmstat может сказать вам, ждете ли вы завершения ввода-вывода и как долго. Размер очереди выполнения и время ожидания ввода-вывода часто коррелируют. Также обратите внимание на sar (из пакета sysstat): он дает вам подробное представление о том, что происходит за определенный период времени; метрики, которые он записывает, очень тщательны.