我正在使用 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"