如何在Linux中获得总CPU使用率(c ++)
我正在试图获得总的CPU使用率%。 首先,我应该首先说“top”根本就不行,因为在cpu转储之间有一个延迟,它需要2个转储和几个秒钟,挂起我的程序(我不想给它自己的线程)
接下来的事情是我试过的“ps”,但是总是给出非常高的数字(20+),而当我真的有我的CPU做了一些东西,大约停留在20 …
有没有其他方法可以得到完整的CPU使用率? 不pipe它是否超过一秒或更长的时间都不重要,但是更长的时间段将会更有用。
猫/ proc / stat
我同意上面的这个答案。 这个文件中的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分钟内进行平均。
读取/proc/cpuinfo
查找可用于系统的CPU /内核的数量。 调用getloadavg()
(或者读取/proc/loadavg
),取第一个值,乘以100(转换为百分数)除以CPU /内核的数量。 如果该值大于100,则将其截断为100.完成。
相关文档: man getloadavg
和man 5 proc
NB对于* NIX系统来说,平均负载平均值可以超过100%(每个CPU /内核),因为它实际上衡量了调度程序可以运行的进程数量。 使用类似于Windows的CPU度量标准,当负载为100%时,您不会真正知道是CPU资源的最佳使用还是系统过载。 在* NIX下,CPU loadavg的最佳使用会使您的值达到1.0(或双系统为2.0)。 如果该值比CPU /内核数量大得多,则可能需要将额外的CPU插入该盒中。
否则,挖掘/proc
文件系统。
猫/ proc / stat
我build议两个文件开始…
/ proc / stat和/ proc / cpuinfo。
http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt