У меня проблемы с загрузкой моего сервера, и, хотя я несколько опытный администратор 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): он дает вам подробное представление о том, что происходит за определенный период времени; метрики, которые он записывает, очень тщательны.