Cpu(s):  4.6%us,  5.5%sy,  0.0%ni, 54.1%id, 35.1%wa,  0.0%hi,  0.7%si,  0.0%st

“У меня сервер тормозит, почему?!”

Что значат эти сокращения

В этой статье ликбез по чтению вывода top. Я рекомендую использовать top с ключами -cd1, явно обозначая интервал между замерами и отображая процессы с их аргументами. Посмотреть распределение нагрузки между ядрами процессора можно, нажав клавишу “1”, тогда формат изменится на такой:

Tasks: 143 total,   1 running, 142 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni, 88.0%id,  0.0%wa,  0.0%hi, 12.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni, 88.8%id,  0.0%wa,  0.0%hi, 11.2%si,  0.0%st
Cpu2  :  0.0%us,  1.0%sy,  0.0%ni, 85.0%id,  0.0%wa,  0.0%hi, 14.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni, 87.8%id,  0.0%wa,  0.0%hi, 12.2%si,  0.0%st
  • us - пользовательские приложения. apache, скрипты, демоны и прочее. Плохо написали код, скорее всего. Часто - бесконечный цикл без sleep.
  • sy, si - системные вещи и software interrupts - внутренности ядра, обработка пакетов итд. В идеале нагрузка распределена равномерно, если Cpu0 трудится, а 1..n находятся на нуле - это нерациональное использование ресурсов. Тут обычно имеет смысл глянуть на то, как обрабатываются прерывания: cat /proc/interrupts. Можно использовать для этого мои утилиты irqtop или network-top. Проблемными значениями можно считать больше 10000 * частота в GHz на ядро.
  • wa - ожидание ввода-вывода. Возможные причины: что-то активно обменивается данными между собой и своими детьми; если выше 70-80%, вероятно, проблема либо с диском, либо с сетевой картой.
  • id - idle - насколько процессор “отдыхает”. По идее смотреть сколько занято проще всего сделав 100%-idle.

Как интерпретировать значения %si в сетевом оборудовании на базе Linux

Нагрузка Интерпретация
0% Проверьте что сервер вообще работает. Если да, у Вас есть хороший запас производительности.
1-3% Всё хорошо настроено, можно увеличивать канал и не беспокоиться об апгрейде аппаратного обеспечения.
6-10% Можно не беспокоиться о текущей нагрузке, но перед увеличением канала нужно позаботиться об увеличении мощностей.
11-15% Нужно задуматься о покупке более хорошего оборудования или оптимизации настроек имеющегося.
20-100% Скорее всего есть потери пакетов. Попробуйте их исправить по моей статье о тюнинге сетевого стека. Если ситуация сохраняется, нужно обновлять оборудование

Когда количественное перетекает в качественное

Бывает так, что ресурсы потребляет не один процесс, а куча его детей, причём берут не качеством, а количеством. Я наблюдал такое:

$ ps aux | grep -c httpd
303

Каждый процесс потребляет ≈ 0.2% CPU, выходит что их сумма составляет

≈0.2 * 300 ≈ 60%

нагрузки.