如何获得Linux中的总CPU使用率(C++)
我想获得总CPU使用率(%)。首先,我应该首先说“top”根本就不行,因为cpu转储之间有一段时间的延迟,它需要2次转储和几秒钟,这会挂起我的程序(我不想给它自己的线程)如何获得Linux中的总CPU使用率(C++)
接下来我试过的是“ps”,它是即时的,但总是给出非常高的数字(20+),当我真的让我的CPU做一些东西时,它停留在大约20 ...
Is there任何其他方式,我可以得到总CPU使用率?不管它是否超过一秒或更长时间......长时间段会更有用。
执行cat/proc/STAT
我上面这个答案达成一致。该文件中的cpu行给出了系统用于执行不同类型处理的“jiffies”的总数。
你需要做的是读取这个文件的2个读数,不管你需要什么时间间隔。这些数字是递增的值(取决于整数翻转),以便获得需要计算您的时间间隔内已经流逝了多少jiffies的%cpu,以及花费了多少工作时间。
例如 在14:00:00假设你有
CPU 4698 591 262 8953 916 449 531
total_jiffies_1 =(所有值的总和)= 16400
work_jiffies_1 =(用户的总和,不错,系统=第一3个值)= 5551
,并在14时00分05秒你有
CPU 4739 591 289 9961 936 449 541
total_jiffies_2 = 17506
work_jiffies_2 = 5619
所以在此期间的%的CPU使用率是:
work_over_period = work_jiffies_2 - work_jiffies_1 = 68
total_over_period = total_jiffies_2 - total_jiffies_1 = 1106
%CPU = work_over_period/total_over_period * 100 = 6.1%
希望有所帮助一点。
刚完成功能,效果很好。谢谢 – Meltea 2010-06-10 19:58:00
这可以很容易地通过找到特定过程的用法吗? – anon58192932 2012-05-07 17:52:31
该技术类似但不完全相同。 您可以从/ proc/
执行cat/proc/STAT
尝试阅读/proc/loadavg
。前三个数字是实际运行的进程数量(即使用CPU),分别在最近的1,5和15分钟内进行平均。
我建议两个文件来启动......
的/ proc/STAT和的/ proc/cpuinfo中。
http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt
读/proc/cpuinfo
找到可用的系统CPU /内核的数量。 调用getloadavg()
(或者阅读/proc/loadavg
),取第一个值,乘以100(转换为百分比),除以CPU /内核的数量。如果该值大于100,则将其截断为100.完成。
相关文章:man getloadavg
和
注:对于* NIX系统,平均负载平均值可以超过100%(每个CPU /内核),因为它实际上测量了调度程序可以运行的进程数量。使用类似于Windows的CPU度量标准,当负载达到100%时,您并不真正知道它是对CPU资源的最佳使用还是系统过载。在* NIX下,CPU loadavg的最佳使用会使您的值达到1.0(或双系统为2.0)。如果该值比CPU /内核数量大得多,则可能需要将额外的CPU插入盒中。
否则,请挖掘/proc
文件系统。
有趣的是,我让电脑闲置了一分钟,最高时间为70秒。顶部显示在那一刻95%空闲。当我读取loadavg时,它显示了0.20,这是分割10%的用法,这种方法对我来说太不健康。我能负担得起的最多是1%的错误... – Meltea 2010-06-10 18:42:45
我有一个系统的平均负载值非常高。拿一个用例来看看上面提出的公式是不准确的:从/ proc/loadavg中的第一个加载数据是159.47 - >乘以 - > 15900 - >除以8(核心,如在/ proc/stat中报告的)给了我一个载荷为1987.5。听起来合理,你简单地截断它到100?不是我...... :-)。这个问题更复杂。/proc/loadavg中的负载数据取决于系统上的进程数量,似乎不堪重负的系统可能非常敏感。看看'collectl'命令行工具 – 2013-11-21 13:20:18
这个方法实际上是给你每个CPU的处理器队列长度。尽管这对整体系统负载来说是一个很好的衡量标准,但它并不代表实际的CPU负载。例如,如果您的CPU执行了大量'iowait',则当实际CPU使用率下降时,队列长度将会增加。 – dtoux 2015-01-20 05:27:16
忘了提及:延迟参数的顶部对我来说也是没用的... – Meltea 2010-06-10 18:13:15