在不使用 top 命令的情况下以百分比形式显示 CPU 个核心使用率

Display CPU cores usage in percentage without using top command

我正在使用 Java 到 运行 Linux 上的命令。由于 top 是一个交互式命令,需要按 1 才能获取所有 cpu(s) 的信息,所以我不能使用它。所以我使用以下命令获取 cpu(s) 信息:

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

我无法安装任何软件包,例如 mpstat。

阅读man page for /proc/stat and this how to page,数字代表...

...the amount of time the CPU has spent performing different kinds of work. Time units are in USER_HZ or Jiffies (typically hundredths of a second).

有了这些知识,我相信创建您想要的百分比非常简单。使用您提供给我们的输出,您可以按照以下方式执行此操作。但是,请记住,这些数字将是自计算机s/server 上次重新启动以来整个时间的总和。

/proc/stat 文件输出:

cpu0 2473973 90 524817 769734476 73628 1124 158588 0 0
cpu1 2199709 103 307315 774486870 68723 95 13171 0 0

一些简单的数学运算

首先添加自启动以来经过的总时间单位。

 772966696 = 2473973 + 90 + 524817 + 769734476 + 73628 + 1124 + 158588 + 0 + 0

现在计算这些百分比

cpu0: 2473973/772966696  90/772966696  524817/772966696  769734476/772966696 ...

并格式化输出

cpu0: 0.3%us, 0.0%sy, 0.0%ni, 99.5% id ...

如果您需要编码方面的帮助,请告诉我,但这应该不会比阅读文件、拉出您想要的行、用 space 拆分行并进行上面的数学运算更难。希望这是有道理的,随时可以问我任何后续问题。