Самый простой способ, который я знаю, это использовать top
в пакетном режиме и в одной итерации:
$ top -bn 1| grep Cpu
%Cpu(s): 5.0 us, 2.8 sy, 0.0 ni, 91.4 id, 0.5 wa, 0.0 hi, 0.2 si, 0.0 st
Смотрите мой ответ здесь для объяснения полей. Достаточно сказать, что вы хотите получить сумму us
, sy
и ni
поэтому требуется некоторый анализ:
$ top -bn 1| grep Cpu | gawk '{print $2+$4+$6}' > logfile
Приведенная выше команда возвращает 7,8, что означает, что в данный конкретный момент используется 7,8% доступной мощности ЦП. Вы можете использовать cron
для запуска этой команды, например, каждую минуту:
$ crontab -e
Откроется окно редактора (любого редактора, который вы указали в качестве переменной оболочки $EDITOR
), вставьте в это окно эту строку, а затем сохраните и закройте ее:
* * * * * top -bn 1| grep Cpu | gawk '{print $2+$4+$6}' >> ~/logfile
Это приведет к тому, что процент загрузки процессора будет записываться в ~/logfile
каждые две минуты.
Если вам нужна разбивка для каждого процессора, вы можете проанализировать вывод mpstat
:
$ mpstat -P ALL | tail -n +4 | gawk '{print "CPU:"$3,$4+$5+$6}'
CPU:all 7.87
CPU:0 10.73
CPU:1 10.75
CPU:2 4.97
CPU:3 5.09