Как читать вывод утилиты "top"
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%
нагрузки.