Linux 如何以百分比显示CPU使用的精确计算
我知道这个问题已经被问了很多次了 但不幸的是,所有给出的答案似乎都不能满足我的需要 每个人似乎都推荐Linux 如何以百分比显示CPU使用的精确计算,linux,bash,awk,cpu-usage,Linux,Bash,Awk,Cpu Usage,我知道这个问题已经被问了很多次了 但不幸的是,所有给出的答案似乎都不能满足我的需要 每个人似乎都推荐/proc/stat,但我似乎找不到一个如预期般有效的答案: 正如您在这里看到的,Core0报告使用率为16%,尽管实际上只有3% 事实上,不管它是否为100%,它仍然报告为16%,只有0.01%-0.02%的增长 我还测试了另一种方法,只使用$2+$4+$5而不是整个范围,但即使这样也会返回不准确的结果 CPU监视器(如上图)是如何获取其信息的?? 因为它似乎不是通过/proc/stat实现的
/proc/stat
,但我似乎找不到一个如预期般有效的答案:正如您在这里看到的,Core0报告使用率为16%,尽管实际上只有3% 事实上,不管它是否为100%,它仍然报告为16%,只有0.01%-0.02%的增长 我还测试了另一种方法,只使用
$2+$4+$5
而不是整个范围,但即使这样也会返回不准确的结果
CPU监视器(如上图)是如何获取其信息的??因为它似乎不是通过
/proc/stat
实现的,除非每个人都做了错事
值得注意的资源:
#!/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
#/bin/bash
H=($(awk'/MHz/{printf'%.2fGHz |“,$4/1000}'/proc/cpuinfo))
A=($(awk'FNR>1&&FNR1&&FNR是p[n,1]
和p[n,0]
?@JamesBrownp
是A
的拆分数组:split(A,p,“|”)
,其结果基本上是(空闲,总计)
,请查看第一个值得注意的资源中的python源代码以了解更多信息。split
(这也让我很反感),这里是python中的等价物p=tuple(v.split(“|”)表示a中的v
,或者换句话说(“idle | total”,…)->((idle,total),…)
我理解在出现a[1],a[2],
但不是a[1,1]
除非您明确定义它,否则我看不到您这样做。对,因为a[1]
的结果是“idle | total”
(或者至少应该是这样,在bash不同意的情况下),我已经想尽一切办法将A
创建为二维数组,但我找不到任何关于创建二维数组的内容,或者更糟糕的是,你甚至无法访问A[n]
,因为我认为A
是一个标量。