12

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

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

Сценарий использования: выходные данные этой команды будут использоваться сценарием для непрерывной регистрации загрузки процессора. top и /proc/stat дают подробное использование, которое трудно зарегистрировать. Есть ли более простой способ получить информацию о процессоре?

2 ответа2

14

Как уже говорили другие, лучший способ, вероятно, top . Он требует небольшой настройки и небольшого разбора, но вы можете получить его, чтобы получить текущее использование процессора в процентах.

top распределяет загрузку процессора между пользователем, системными процессами и nice процессами, нам нужна сумма из трех. Таким образом, мы можем запустить top в режиме ATCH b , что позволяет нам анализировать свою продукцию. Однако, как объяснено здесь , 1-я итерация top -b возвращает проценты с момента загрузки, поэтому нам нужно как минимум две итерации (-n 2), чтобы получить текущий процент. Чтобы ускорить процесс , вы можете установить d ELAY между итерациями до 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}'
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 минут.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .