Топ показывает 64% простоя на первом экране или в пакетном режиме, в то время как простоя нет вообще
Я использую довольно тяжелые вычисления на нескольких 4-х ядерных серверах, все из которых работают под управлением Ubuntu Precise Pangolin LTS 64 bit в облаке (так что я полагаю, в виртуализированной среде).
Чтобы контролировать использование процессора, я написал.sh, который использует "top -b -n 1" (то есть один запуск top, только первый "фрейм") и объединяет его с некоторыми другими данными, чтобы написать небольшой отчет.,
Однако top всегда сообщал о 64% простоя в строке процессора для каждого сервера, даже если я был уверен, что все четыре ядра были заняты на 100%.
На самом деле, при интерактивном запуске top он сообщает о 64% времени простоя, но как только он обновляет, он сообщает правильные (почти 0% бездействия) данные.
Кроме того, vmstat в столбце cpu всегда сообщает о 64% времени простоя в первой строке, а затем начинает сообщать (предположительно) реальные данные.
Почему это? Это ошибка в top/vmstat или в ядре? Или это известный побочный эффект того, как измеряется CPU%? Почему всегда 64%?
Загрузка процессора вместо этого всегда правильная (около 4).
2 ответа
Это связано с тем, что top, vmstat, iostat при первом запуске собирают данные с момента последней перезагрузки системы.
И последующие итерации выполняются в указанный вами период выборки. Итак, при первом запуске top вы увидите% простоя, потому что с момента перезагрузки до времени запуска top было так много% простоя. Но на следующих итерациях, поскольку он занят, он не показывает% простоя.
Исключите первую итерацию и попробуйте выполнить выборку за нужный интервал.
Вы можете сделать это grep
пропинговать строку, начинающуюся с "Cpu (s)" и передавая результат через tail
,
top -b -n2 -d 0.1 |grep "Cpu(s)"|tail -n +1
tail -n +1
отбрасывает первую строку (плохие результаты) и пропускает только вторую. -d 0.1
означает задержку в одну десятую секунды между первой и второй итерацией top
; -b -n2
означает запустить дважды в пакетном режиме. Окончательный результат этого - единственная строка, содержащая "хорошие" результаты, которые вы можете затем использовать в отчете.
Если вам нужны другие строки, кроме строки "Процессор (ы)", промойте и повторите для каждой из них.