2013-07-04 5 views
2

Вот моя команда:в Linux - всегда то же самое значение

top -b -n 1 | head -3 | tail -n 1 | awk '{ print $2 }' 

Я бегу Баш скрипт, который получает эти данные (также Load Average и расход памяти) и сохраняет его в файл, который я использовать для визуализации нагрузки процессора.

Но приведенная выше команда показывает неизменное значение! ~ 6%, независимо от того, находится ли сервер под большой нагрузкой или бездействует.

когда я бегу:

top 

Это показывает то же значение (~ 6%) в начале, и после обновления он показывает реальное значение (например, 80%.).

Как исправить это, или как получить текущее использование процессора, которое можно использовать для визуализации?

+1

Возможный дубликат [Использование ЦП в верхнем пакетном режиме] (http://stackoverflow.com/questions/4325584/cpu-usage-in-top-batch-mode) – dogbane

+0

Да, я вижу, это та же проблема, но все равно не смог найти правильный ответ – Tom

ответ

5

Это потому, что top, vmstat, iostat все в своем первом запуске собирают данные с момента последнего перезапуска системы.

И последующие итерации выполняются в течение периода выборки, который вы указываете. Итак, в первом прогоне вы увидите время %idle, потому что с момента перезагрузки до момента запуска сверху, это было так много простоя. Но в следующих итерациях, поскольку он занят, он не показывает %idle.

Вы получаете попробовать это:

top -b -n 5 -d.2 | grep "Cpu" | tail -n 1 | awk '{ print($2)}' 

или чуть короче

top -b -n 5 -d.2 | grep "Cpu" | awk 'NR==3{ print($2)}' 

Он должен напечатать что-то вроде:

48.8%us, 
1

Возможным Обойти бы увеличить число итерации, прежде чем вы получите результат. Так что попробовать что-то вроде:

top -b -n 3 | awk 'NR==3{print $2;exit}' 

Примечание: я удалил head и tail, так как вы можете все с только awk.

+0

Для меня с 'top: procps version 3.2.8' это возвращает« результат первой итерации ». – Patryk

Смежные вопросы