不使用top命令以百分比显示CPU核心使用情况

时间:2015-08-12 15:44:13

标签: python linux shell centos jsch

我正在使用Java在Linux上运行命令。由于top是一个交互式命令,需要按1才能获取所有cpu的信息,所以我不能使用它。所以我使用以下命令获取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

现在我的问题是如何在显示最高命令时获得百分比。

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这样的软件包。

1 个答案:

答案 0 :(得分:4)

通过阅读man page for /proc/stat和此how to page,数字代表......

  

...... CPU执行不同类型工作所花费的时间。时间单位为USER_HZ或Jiffies(通常为百分之一秒)。

有了这些知识,我相信创造你想要的百分比非常简单。使用你给我们的输出,这是你如何做到这一点。但是,请记住,自计算机/服务器上次重启以来,这些数字将在整个时间内聚合。

/ 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 ...

如果你需要帮助编码,请告诉我,但它不应该比阅读文件更难,拉出你想要的线条,按空格分割线条并进行上面的数学运算。希望这是有道理的,并随时向我提出任何后续问题。