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

标签 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

现在我的问题是如何在 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还有这个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).

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

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

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

关于python - 在不使用 top 命令的情况下以百分比显示 CPU 核心使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969884/

相关文章:

linux - shell 'SED' - 使用变量

bash - 如何使用ffmpeg有序地合并目录中的所有视频?

python - 如何将图像放大到特定点 + 缩放后跟踪特定点

python - SQLAlchemy/Pyramid DBSession 刷新问题

linux - 带有管道的 bash 复合命令

linux - 从 grep 中排除 .svn 目录

php - 如何使用 linux 的 shell 脚本运行 Laravel 路由?

linux - 为什么 sed 命令中 g 关键字之前有 2 个正斜杠?

没有额外模块的Python AES加密

python - 使用 urllib2 检查响应