如何在Linux中获得总CPU使用率(c ++)

我正在试图获得总的CPU使用率%。 首先,我应该首先说“top”根本就不行,因为在cpu转储之间有一个延迟,它需要2个转储和几个秒钟,挂起我的程序(我不想给它自己的线程)

接下来的事情是我试过的“ps”,但是总是给出非常高的数字(20+),而当我真的有我的CPU做了一些东西,大约停留在20 …

有没有其他方法可以得到完整的CPU使用率? 不pipe它是否超过一秒或更长的时间都不重要,但是更长的时间段将会更有用。

猫/ proc / stat

http://www.linuxhowtos.org/System/procstat.htm

我同意上面的这个答案。 这个文件中的cpu行给出了你系统花费在不同types的处理上的“jiffies”总数。

你需要做的是读取这个文件的2个读数,不pipe你需要什么时间间隔。 这些数字是递增的价值(受整数翻转),以获得%cpu你需要计算多lessjiffies已经在你的时间间隔,已经花了多less工作jiffies。

假设在14:00:00你有

cpu 4698 591 262 8953 916 449 531

total_jiffies_1 =(所有值的总和)= 16400

work_jiffies_1 =(用户总数,nice,system =前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%

希望有点帮助。

尝试阅读/proc/loadavg 。 前三个数字是实际运行的进程数量(即使用CPU),分别在过去的1分钟,5分钟和15分钟内进行平均。

http://www.linuxinsight.com/proc_loadavg.html

读取/proc/cpuinfo查找可用于系统的CPU /内核的数量。 调用getloadavg() (或者读取/proc/loadavg ),取第一个值,乘以100(转换为百分数)除以CPU /内核的数量。 如果该值大于100,则将其截断为100.完成。

相关文档: man getloadavgman 5 proc

NB对于* NIX系统来说,平均负载平均值可以超过100%(每个CPU /内核),因为它实际上衡量了调度程序可以运行的进程数量。 使用类似于Windows的CPU度量标准,当负载为100%时,您不会真正知道是CPU资源的最佳使用还是系统过载。 在* NIX下,CPU loadavg的最佳使用会使您的值达到1.0(或双系统为2.0)。 如果该值比CPU /内核数量大得多,则可能需要将额外的CPU插入该盒中。

否则,挖掘/proc文件系统。

我build议两个文件开始…

/ proc / stat和/ proc / cpuinfo。

http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt