如何显示准确的CPU使用率百分比计算

时间:2020-03-07 16:48:52

标签: linux bash awk cpu-usage

我知道这个问题已经被问过很多遍了 但不幸的是,给出的答案似乎都无法满足我的需求。

每个人似乎都推荐/proc/stat,但我似乎找不到1个符合预期的答案:

正如您在此处看到的那样,核心0报告使用了16%,尽管实际上仅使用了3% 实际上,它是否为100%无关紧要,它仍然报告16%,仅增加0.01%-0.02%

我还测试了仅使用$2+$4 +$5而不是整个范围的另一种方法,但是即使返回的结果也不准确...

如上图所示,CPU监视器如何获取其信息?
因为除非所有人都做错了,否则它似乎不会通过/proc/stat进行。

重要资源:

我仔细研究了很多,但它们几乎都指向相同的事物。

至于脚本,我知道它有点混乱,我对bash的使用不多,但这是:

#!/bin/bash
H=($(awk '/MHz/{printf "%.2fGHz|", $4/1000}' /proc/cpuinfo))
A=($(awk 'FNR>1 && FNR<4 {
    i=$5+$6; printf "%d|%d\n", i, i+$2+$3+$4+$7+$8+$9
}' /proc/stat))
sleep 0.125
awk -v a="${A[*]}" -v h="${H[*]}" -v n="0" 'FNR>1 && FNR<4 {
    n++
    split(h,s,"|"); split(a,p,"|")
    i=$5+$6; t=(i+$2+$3+$4+$7+$8+$9)-p[n,1]
    printf "%s: %s %.2f%\n", $1, s[n], ((t-(i-p[n,0]))/t)*100
}' /proc/stat

几乎所有其他答案都遵循了它...

如果有更好的方法可以做到这一点(例如将cpuinfostat合并,或者不必要地拆分数组以防止s[n]报告标量错误,甚至在awk内睡眠和重新阅读),请务必进行改进。 :)

0 个答案:

没有答案