我正在使用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这样的软件包。
答案 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 ...
如果你需要帮助编码,请告诉我,但它不应该比阅读文件更难,拉出你想要的线条,按空格分割线条并进行上面的数学运算。希望这是有道理的,并随时向我提出任何后续问题。