Як я можу отримувати найкращі статистичні дані процесора з оболонки?


12

Я намагаюся отримати точне зчитування використовуваного процесора (у відсотках) від top. Це команда, яку я виконую для тестування:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

Це повертає:

10.7%us,

Який потрібний фрагмент даних я хочу. Однак кожного разу, коли я запускаю команду, я отримую однаковий вихід, навіть якщо я застосовую різні навантаження на мою систему (і не кажучи вже htopпро те, що моє використання інше). Здається, що коли я починаю top, моє використання процесора однакове. Лише через пару кадрів це дає мені належні значення.

Здається, я не можу таким чином проаналізувати вихідний результат, тому я шукаю інші надійні програми, які дадуть мені точне зчитування з оболонки. Мені дуже подобається, як htopможна дати мені прочитати основні.

Я спробував iostatі , mpstatале вони , здається, дають неточні і «повільні зміни» цінності.


2
Не варто. Справжнє запитання, яке потрібно задати: Як отримати найкращу статистику використання процесора з оболонки?
Стефан Гіменез

@ StéphaneGimenez дякую, що я змінив своє запитання
n0pe

Відповіді:


12

Я використовую цей скрипт (з цієї теми на платах Arch ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))

Linux має чудову інформацію про / proc / - див. Linux.die.net/man/5/proc про всі смаколики. Просто будьте уважні, що це лише Linux. Насправді немає платформного способу отримати цю інформацію, якщо ви не використовуєте бібліотеку типу Sigar .
Пат Нотц

Ідея хороша, але деякі деталі невірні. Значення в режимі очікування - це 5-й стовпчик, і ви також повинні додати стовпець iowait (6-й стовпець), щоб отримати розумний відсоток. Щоб бути повністю правильним, вам також доведеться додати всі значення "відпочинок", але вони часто дуже малі.
Пітер Ейзентраут

Значення в режимі очікування - це п'ятий стовпець, якщо ви рахуєте стовпець "cpu". Інакше це четверте.
SunSparc

6

Ознайомтесь із саром . Реалізація може значно варіюватися від nix до nix, але вона повинна дати вам основні статистичні дані системи, за даними знімків. Я не впевнений, наскільки точні значення в точці, в якій команда вперше ініціалізована, але ви можете пограти, щоб побачити, як вона порівнюється з top, iostatі т.д.

Вихід є на основі стовпців, як і верхній, тому ви повинні мати можливість передавати результати на результат awkабо cutманіпулювати результатами.


Я раніше намагався sarзі змішаними результатами. Я збираюся піти з відповіддю @ jasonwryan тут, тому що я можу легко змінити його для відображення використання обох моїх процесорних ядер.
n0pe


0

Те, що я знайшов, схоже на людину, яка задала питання вище, принаймні, на CentOS 6. Якщо я запускаю верхню частину в пакетному режимі лише за одну ітерацію, то, схоже, збирається однакова цифра, майже як якщо б її тенденція почалася з того, з чого востаннє запам'ятовує показ. Здається, вгорі потрібно накопичити хоча б пару цифр, щоб отримати дельти, щоб отримати правильні відсотки. Перевіривши понад 10 ітерацій, я виявив, що друга фігурка, що вискочила, показала достатню диференціацію на кожному пробігу. Отже, досить просто отримати цю лінію через

top -b -n 2 | grep Cpu | tail -1

Мені подобається включати це в режим безперервного завантаження та фільтр grep для вибраних процесів з ps, таких як запити постгресів. Дуже простий монітор може бути виражений псевдонімом:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.