Какие методы доступны для загрузки процессора в командной строке Linux? [закрыто]

12

Мы знаем, что topэто команда для получения загрузки ЦП в Linux и других способов, включая cat /proc/stattop.

Каковы другие способы получения загрузки процессора в командной строке 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режиме atch, который позволяет нам анализировать его вывод. Однако, как объяснено здесь , 1-я итерация top -bвозвращает проценты с момента загрузки, поэтому нам нужно как минимум две итерации ( -n 2) для получения текущего процента. Чтобы ускорить процесс, вы можете установить значение delay между итерациями равным 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«возвращает процент времени, потраченного на выполнение в течение всего времени жизни процесса», что не является тем, что вам нужно.


РЕДАКТИРОВАТЬ

Исходя из вашего комментария, ваша версия 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}'
terdon
источник
Я удалил свой ответ, потому что то, что вы сказали, правильно. Этот, кажется, правильный метод.
Натан С
@NathanC Я тоже думал, что твой ответ был верным, именно на это я и ответил бы. Тогда я проверил это и был удивлен :).
Terdon
@terdon Спасибо за ваш подробный ответ ... Я не смог получить вывод для вышеуказанной команды. Требуется ли какая-либо синтаксическая модификация ..
fasil
@fasil нет, это должно работать. В чем проблема? Есть сообщения об ошибках?
тердон
@terdon Я не получаю никакого вывода для полной команды .. с #top -bn 2 -d 0.01 я получаю полный результат, но при добавлении grep '^% Cpu' я не вижу никаких выходных данных, только подсказки возвращают no ошибка ...
Фасил
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 раз.
Джеймс Макдоннелл