我试图以%为单位获得总CPU使用率。首先我应该首先说“顶部”根本不会这样做,因为cpu转储之间存在延迟,它需要2个转储和几秒钟,这会挂起我的程序(我不想给它自己的线程)
接下来的事情我尝试的是“ps”,这是即时的,但总是给出非常高的数字(20+),当我实际上让我的cpu做一些事情时它停留在20左右......
还有其他方法可以获得总CPU使用率吗?如果它超过一秒或更长的时间段并不重要......但是更长的时期会更有用。
答案 0 :(得分:78)
cat / proc / stat
我同意上面的答案。此文件中的cpu行给出了系统执行不同类型处理所花费的“jiffies”总数。
您需要做的是获取此文件的2个读数,按您需要的任何时间间隔分开。这些数字是增加的值(受整数翻转影响)所以要获得%cpu,你需要计算你的间隔时间内经过的jiffies数量,以及花在工作上的jiffies数量。
e.g。 假设在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%
希望有所帮助。
答案 1 :(得分:6)
尝试阅读/proc/loadavg
。前三个数字是实际运行的进程数(即使用CPU),分别是过去1分钟,5分钟和15分钟的平均值。
答案 2 :(得分:6)
读取/proc/cpuinfo
以查找系统可用的CPU /核心数。
调用getloadavg()
(或者读取/proc/loadavg
),取第一个值,乘以100(转换为百分比),除以CPU /核心数。如果该值大于100,则将其截断为100.完成。
相关文档:man getloadavg
和man 5 proc
N.B。通常为* NIX系统的负载平均值可以超过100%(每个CPU /核心),因为它实际上测量了调度程序准备运行的进程数。使用类似Windows的CPU指标,当负载为100%时,您并不真正知道它是否是CPU资源的最佳使用或系统是否过载。在* NIX下,CPU loadavg的最佳使用会给你值~1.0(或双系统的2.0)。如果该值远大于CPU /核心数,则可能需要将额外的CPU插入到框中。
否则,挖掘/proc
文件系统。
答案 3 :(得分:2)
看看这个 C++ Lib。
信息是从 /proc/stat 解析出来的。它还解析来自 /proc/meminfo 的内存使用和来自 /proc/net/dev 的以太网负载
----------------------------------------------
current CPULoad:5.09119
average CPULoad 10.0671
Max CPULoad 10.0822
Min CPULoad 1.74111
CPU: : Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
----------------------------------------------
network load: wlp0s20f3 : 1.9kBit/s : 920Bit/s : 1.0kBit/s : RX Bytes Startup: 15.8mByte TX Bytes Startup: 833.5mByte
----------------------------------------------
memory load: 28.4% maxmemory: 16133792 Kb used: 4581564 Kb Memload of this Process 170408 KB
----------------------------------------------
答案 4 :(得分:1)
cat / proc / stat
答案 5 :(得分:0)
我建议启动两个文件......
/ proc / stat和/ proc / cpuinfo。
http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt
答案 6 :(得分:0)
cpu-stat是一个允许从/ proc / stat读取Linux CPU计数器的C ++项目。
从cpu-stat的src目录中获取CPUData。*和CPUSnaphot。*文件。
快速实施以获得整体cpu使用情况:
#include "CPUSnapshot.h"
#include <chrono>
#include <thread>
#include <iostream>
int main()
{
CPUSnapshot previousSnap;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
CPUSnapshot curSnap;
const float ACTIVE_TIME = curSnap.GetActiveTimeTotal() - previousSnap.GetActiveTimeTotal();
const float IDLE_TIME = curSnap.GetIdleTimeTotal() - previousSnap.GetIdleTimeTotal();
const float TOTAL_TIME = ACTIVE_TIME + IDLE_TIME;
int usage = 100.f * ACTIVE_TIME / TOTAL_TIME;
std::cout << "total cpu usage: " << usage << std::endl;
}
编译:
g++ -std=c++11 -o CPUUsage main.cpp CPUSnapshot.cpp CPUData.cpp