Які методи доступні для використання процесора в командному рядку Linux? [зачинено]


12

Ми знаємо, що topце команда отримати використання процесора в Linux та інші способи включають те, cat /proc/statщо використовується зверху.

Які ще методи використання процесора в командному рядку Linux?

Сценарій використання випадку: Вихід цієї команди буде використовуватися сценарієм для постійного журналу використання ЦП. topі /proc/statдати детальне використання, яке важко реєструвати. Чи є простіший спосіб отримати інформацію про процесор?


3
що не так з цитованими цитатами?
pataluc

@pataluc Це дає більш детальну інформацію. Мені потрібно загальне використання процесора, скажімо, використаний процесор: 91% Пам'ять використано: 78% Мем безкоштовно: 22% щось подібне ..
fasil

дивіться відповідь Натана ... ви можете sedотримати результат, якщо ви хочете лише значення.
pataluc

Голосування про закриття як "неконструктивне". Від superuser.com/help/dont-ask : " Щоб запобігти позначці та можливому видаленню вашого питання, уникайте запитань суб'єктивних питань, де ... ваша відповідь надається разом із запитанням, і ви очікуєте більше відповідей:" Я використовую ______ для ______ , що ти використовуєш? ' "
bwDraco

3
@DragonLord насправді є досить обмежені способи зробити це, і два відповіді тут справді корисні. Моя вказує на дуже поширене неправильне уявлення про, topа інше дає дуже корисну команду. Це не я використовую X, як з вами? питання, але як зробити X питання. Голосування за повторне відкриття.
тердон

Відповіді:


14

Як казали інші, найкращий спосіб - це, мабуть top. Потрібно трохи переробити і трохи проаналізувати, але ви можете отримати це, щоб ви отримали поточне використання процесора у відсотках.

topрозділяє використання процесора між користувачем, системними процесами та niceпроцесами, ми хочемо суму трьох. Отже, ми можемо працювати topв bрежимі атчаса, що дозволяє нам проаналізувати його вихід. Однак, як пояснено тут , 1-а ітерація top -bповертає відсотки після завантаження, тому нам потрібно принаймні дві ітерації ( -n 2), щоб отримати поточний відсоток. Щоб прискорити роботу, ви можете встановити dпроміжок між ітераціями на 0.01. Нарешті, ви grepвказуєте рядок, що містить відсотки процесора, а потім використовуєте gawkдля підсумовування користувачів, системних та приємних процесів:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode

Я думав, що ви також можете отримати цю інформацію ps -o pcpu ax, додавши% використання кожного запущеного процесу. На жаль, як пояснено тут , ps"повертається відсоток витраченого часу на весь процес процесу", який не є необхідним.


EDIT

Виходячи з вашого коментаря, ваша версія topвідрізняється від моєї, і ви повинні використовувати її замість цього:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

І, щоб уникнути проблем з локалізацією, встановіть мову на C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Я видалив свою відповідь, оскільки те, що ви сказали, є правильним. Цей метод, здається, є дійсним.
Натан C

@NathanC Я теж вважав, що твоя відповідь була правильною, саме так я і відповів би. Тоді я тестував це і був здивований :).
тердон

@terdon Дякую за детальну відповідь ... Я не зміг отримати вихід для вищевказаної команди. Чи потрібна якась синтаксична модифікація ..
fasil

@fasil ні, це має працювати. В чому проблема? Будь-які повідомлення про помилки?
тердон

@terdon Я не отримую жодного виводу для повної команди. З #top -bn 2 -d 0.01 я отримую повний результат, але при додаванні grep '^% Cpu' я не бачу жодного виводу, просто підказки не повертаються ні помилка ...
fasil

9

sarце остаточний спосіб зробити це. Так, наприклад, sar -uвиведе щось подібне:

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78

Ви не кажете, який Linux ви використовуєте, але для CentOS / RedHat вам потрібно встановити sysstatпакет, і я думаю, що це те саме на Debian / Ubuntu.

Ви також можете використовувати sar для збору статистичних даних ad hoc :

sar -o /tmp/sar.out 60 600

Збиратиме статистику кожні 60 секунд 600 разів, тож 600 хвилин.


1
Вам, мабуть, слід висловити його різними. Рядок, який ви опублікували, вимірюватиме кожні 60 секунд, 600 разів. Як я прочитав вашу публікацію, це те, що 600 - це тривалість, тож якщо я покладу 30 600, це займе кожні 30 секунд протягом 600 хвилин, однак насправді це триватиме кожні 30 секунд 600 разів.
Джеймс МакДоннелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.