Я запускаю довольно сложную задачу по вычислению чисел на нескольких 4-х ядерных серверах, все из которых работают под управлением 64-разрядной версии Ubuntu Precise Pangolin LTS в облаке (так что, я полагаю, в виртуализированной среде).
Чтобы отслеживать использование процессора, я написал .sh, который использует «top -b -n 1» (то есть один запуск top, только первый «кадр») и объединяет его с некоторыми другими данными, чтобы написать небольшой отчет. .
Однако top всегда сообщал о 64% простоя в строке процессора для каждого сервера, даже если я был совершенно уверен, что все четыре ядра были заняты на 100%.
Фактически, при запуске top в интерактивном режиме в первом кадре он сообщает о 64% времени простоя, но как только он обновляется, он сообщает правильные (почти 0% простоя) данные.
vmstat также в столбце cpu всегда сообщает о 64% времени простоя в первой строке, а затем начинает сообщать (предположительно) реальные данные.
Почему это? Это ошибка в top / vmstat или в ядре? Или это известный побочный эффект того, как измеряется процент ЦП? Почему всегда 64%?
загрузка процессора всегда правильная (около 4).
Это связано с тем, что все команды 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
означает запуск дважды в пакетном режиме. Конечным результатом этого является единственная строка, содержащая «хорошие» результаты, которые затем можно использовать в отчете.
Если вам нужны другие строки помимо строки «Cpu (s)», промойте и повторите для каждой из них.