是否有一个命令可以以静态方式(即仅一次)显示 CPU 使用信息(包括整体 CPU 和单个内核),类似于如何free
显示内存使用信息?
当我们运行时top
,点击后顶部的 cpu 信息1
显示单个核心使用情况以及整体 cpu 使用情况可能就是我想要的。但top
默认情况下动态更新信息,并输出比我需要的更多信息(内存和每个进程信息)。
谢谢。
答案1
有一个命令可以动态显示处理器相关的运行时统计信息,称为
mpstat
。在大多数发行版上,它是软件包的一部分sysstat
。
虽然它的输出可以更直接地回答您的问题mpstat -P ALL -I CPU
,但我更喜欢以下输出mpstat -P ALL
,即更容易理解。
例如,具有 40 个 CPU 的机器的输出:
Linux 3.0.101-63-default 02/16/19 _x86_64_
09:52:11 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
09:52:11 all 0.04 0.00 0.04 0.02 0.00 0.00 0.00 0.00 99.90
09:52:11 0 0.13 0.00 0.13 0.57 0.00 0.00 0.00 0.00 99.16
09:52:11 1 0.24 0.00 0.49 0.07 0.00 0.00 0.00 0.00 99.21
09:52:11 2 0.04 0.00 0.03 0.00 0.00 0.00 0.00 0.00 99.94
09:52:11 3 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
09:52:11 4 0.02 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.97
09:52:11 5 0.02 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 6 0.02 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98
09:52:11 7 0.02 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.97
09:52:11 8 0.01 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98
09:52:11 9 0.01 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98
09:52:11 10 0.12 0.00 0.10 0.19 0.00 0.00 0.00 0.00 99.59
09:52:11 11 0.09 0.00 0.06 0.01 0.00 0.00 0.00 0.00 99.84
09:52:11 12 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.94
09:52:11 13 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.94
09:52:11 14 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
09:52:11 15 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
09:52:11 16 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.95
09:52:11 17 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
09:52:11 18 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 19 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
09:52:11 20 0.06 0.00 0.06 0.01 0.00 0.00 0.00 0.00 99.87
09:52:11 21 0.19 0.00 0.27 0.01 0.00 0.00 0.00 0.00 99.54
09:52:11 22 0.02 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.97
09:52:11 23 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 24 0.02 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.97
09:52:11 25 0.02 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.97
09:52:11 26 0.01 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98
09:52:11 27 0.01 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98
09:52:11 28 0.01 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98
09:52:11 29 0.01 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98
09:52:11 30 0.04 0.00 0.04 0.00 0.00 0.00 0.00 0.00 99.92
09:52:11 31 0.03 0.00 0.03 0.00 0.00 0.00 0.00 0.00 99.94
09:52:11 32 0.02 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 33 0.02 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 34 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 35 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 36 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 37 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 38 0.02 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.96
09:52:11 39 0.03 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.96
从man mpstat
mpstat 命令写入每个可用处理器的标准输出活动,处理器 0 是第一个。还报告了所有处理器的全球平均活动。 mpstat 命令可以在 SMP 和 UP 机器上使用,但在后者中,只会打印全局平均活动。如果未选择任何活动,则默认报告是 CPU 利用率报告。
如果您对该主题感兴趣,我推荐这本书:
PS 虽然mpstat
在短期内非常有用,但sar
也随 一起安装的配套实用程序sysstat
最终对于建立长期模式和基线更有用。
推论:不要用cron
,mpstat
用sar
。
答案2
top -bn 1
设置好你的顶级 rc 后;
top
1
W
q
grep 你想要什么
top -bn 1 | grep -P "^(%|top)"
对于像这样的输出
top - 11:40:33 up 24 days, 32 min, 1 user, load average: 0.00, 0.00, 0.00
%Cpu0 : 0.0 us, 1.2 sy, 0.0 ni, 98.1 id, 0.1 wa, 0.3 hi, 0.2 si, 0.0 st
%Cpu1 : 0.0 us, 0.9 sy, 0.0 ni, 98.9 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.8 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.8 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
%Cpu4 : 2.0 us, 2.0 sy, 0.2 ni, 93.0 id, 2.3 wa, 0.2 hi, 0.3 si, 0.0 st
%Cpu5 : 0.9 us, 3.0 sy, 0.1 ni, 94.8 id, 0.8 wa, 0.3 hi, 0.1 si, 0.0 st
%Cpu6 : 0.2 us, 2.6 sy, 0.0 ni, 96.4 id, 0.4 wa, 0.2 hi, 0.1 si, 0.0 st
%Cpu7 : 0.1 us, 1.0 sy, 0.1 ni, 98.4 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st