不使用 top 来显示 CPU 核心使用率百分比

不使用 top 来显示 CPU 核心使用率百分比

我正在使用 java 在 linux 上运行命令。由于 top 是一个交互式命令,需要按 1 才能获取所有 cpu 的信息,所以我无法使用它。所以我使用以下命令来获取 cpu 信息:

cat /proc/stat|grep "^cpu[0-9]* ";sleep 3;cat /proc/stat|grep "^cpu[0-9]* "

我得到的输出为:

cpu  4673683 193 832132 1544221346 142352 1220 171760 0 0
cpu0 2473973 90 524817 769734476 73628 1124 158588 0 0
cpu1 2199709 103 307315 774486870 68723 95 13171 0 0
cpu  4673683 193 832133 1544221744 142352 1220 171760 0 0
cpu0 2473974 90 524817 769734674 73628 1124 158588 0 0
cpu1 2199709 103 307315 774487069 68723 95 13171 0 0

现在我的问题是如何获取 top 命令显示的百分比。

 Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

答案1

尝试一下包mpstat中的实用程序sysstat

mpstat -u -P ALL

CentOS 主机(具有 1 个虚拟 cpu 的虚拟主机)上的输出:

Linux 3.10.0-229.4.2.el7.x86_64 (testhost.testdomain)   08/11/2015  _x86_64_    (1 CPU)

10:03:57 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:03:57 AM  all    0.21    0.05    0.29    0.04    0.00    0.13    0.00    0.00    0.00   99.28
10:03:57 AM    0    0.21    0.05    0.29    0.04    0.00    0.13    0.00    0.00    0.00   99.28

Ubuntu 主机上的输出:

Linux 3.13.0-24-generic (myhost)    11-08-15    _x86_64_    (4 CPU)

10:05:37     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:05:37     all    3,34    0,04    1,16    0,13    0,08    0,00    0,00    0,00    0,00   95,25
10:05:37       0    2,81    0,06    1,93    0,13    0,11    0,00    0,00    0,00    0,00   94,96
10:05:37       1    3,94    0,03    0,78    0,10    0,03    0,00    0,00    0,00    0,00   95,13
10:05:37       2    3,31    0,02    1,21    0,16    0,07    0,00    0,00    0,00    0,00   95,24
10:05:37       3    3,31    0,05    0,73    0,14    0,10    0,00    0,00    0,00    0,00   95,68

答案2

可能会这样尝试:

 top -b -n 1 | grep -i "^cpu"

以下是我机器上的输出:

wbzz@mambet:~$ top -b -n 1 | grep -i "^cpu"
Cpu0  : 10.5%us,  4.5%sy,  0.0%ni, 82.4%id,  1.6%wa,  0.0%hi,  1.0%si,  0.0%st
Cpu1  : 44.5%us, 15.0%sy,  0.0%ni, 40.2%id,  0.2%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu2  : 43.8%us, 18.1%sy,  0.0%ni, 37.7%id,  0.1%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu3  : 45.1%us, 14.5%sy,  0.0%ni, 40.3%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st

这适用于 slackware-current。在 CentOS 机器上需要将 grep 表达式更改为:

top -b -n 1 | grep -i "^%cpu"

相关内容