在不使用 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 拆分行并进行上面的数学运算更难。希望这是有道理的,随时可以问我任何后续问题。
我正在使用 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 拆分行并进行上面的数学运算更难。希望这是有道理的,随时可以问我任何后续问题。