我试图得到总的cpu使用率%。首先我应该说“top”根本不起作用,因为cpu转储之间有延迟,它需要2个转储和几秒钟,这挂起了我的程序(我不想给予它自己的线程)下一件事,我尝试的是“ps”,这是即时的,但总是给出非常高的数字总数(20+),当我真正让我的cpu做一些事情,它停留在约20...有没有其他方法可以得到总的cpu使用率?如果超过一秒或更长的时间段并不重要...虽然更长的时间段会更有用。
cedebl8k1#
目录/过程/状态http://www.linuxhowtos.org/System/procstat.htm我同意上面的答案。这个文件中的cpu行给出了你的系统在做不同类型的处理时所花费的“jifies”的总数。你需要做的是读取这个文件的两个数据,以你需要的时间间隔分开,这些数据是递增的(受整数翻转的影响),所以要得到%cpu,你需要计算在你的时间间隔内有多少jiffies已经过去了,相对于有多少jiffies花在工作上。例如,假设在14:00:00您有中央处理器4698 591 262 8953 916 449 531总计_jifies_1 =(所有值的总和)= 16400work_jifies_1 =(用户、友好、系统=前3个值的总和)= 5551在14:00:05你有中央处理器4739 591 289 9961 936 449 541总计_jifies_2 = 17506工作_备忘录_2 = 5619因此,这段时间内的CPU使用率百分比为:工作时间=工作量2-工作量1 = 68一段时间内总计=总计jifies 2-总计jifies 1 = 1106%cpu =工作超出周期/总超出周期 * 100 = 6.1%
wnavrhmk2#
尝试阅读/proc/loadavg,前三个数字是实际运行(即使用CPU)的进程数,分别是过去1、5和15分钟的平均值。http://www.linuxinsight.com/proc_loadavg.html
/proc/loadavg
tjvv9vkg3#
读取/proc/cpuinfo以查找系统可用的CPU/内核数。调用getloadavg()(或者读取/proc/loadavg),取第一个值,乘以100(以转换为百分比),除以CPU/内核数。如果值大于100,则将其截断为100。完成。相关文件:man getloadavg和man 5 proc注意:负载平均值(通常用于 *NIX系统)可超过100%(每个CPU/核心),因为它实际上测量调度程序准备运行的进程数。使用类似Windows的CPU度量,当负载为100%时,您无法真正知道这是CPU资源的最佳使用还是系统过载。在 *NIX下,CPU loadavg的最佳使用将为您提供约1.0的值(或对于双系统为2.0)。如果该值远大于CPU/内核数,则您可能需要将额外的CPU插入到机箱中。否则,挖掘/proc文件系统。
/proc/cpuinfo
getloadavg()
man getloadavg
man 5 proc
/proc
kkbh8khc4#
cpu-stat是一个C++项目,允许从/proc/stat读取Linux CPU计数器。从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
afdcj2ne5#
目录/过程/状态http://www.linuxhowtos.org/System/procstat.htm
2j4z5cfb6#
我建议从两个文件开始.../处理器/状态和/处理器/CPU信息。http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt
qco9c6ql7#
看看这个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 ----------------------------------------------
7条答案
按热度按时间cedebl8k1#
目录/过程/状态
http://www.linuxhowtos.org/System/procstat.htm
我同意上面的答案。这个文件中的cpu行给出了你的系统在做不同类型的处理时所花费的“jifies”的总数。
你需要做的是读取这个文件的两个数据,以你需要的时间间隔分开,这些数据是递增的(受整数翻转的影响),所以要得到%cpu,你需要计算在你的时间间隔内有多少jiffies已经过去了,相对于有多少jiffies花在工作上。
例如,假设在14:00:00您有
中央处理器4698 591 262 8953 916 449 531
总计_jifies_1 =(所有值的总和)= 16400
work_jifies_1 =(用户、友好、系统=前3个值的总和)= 5551
在14:00:05你有
中央处理器4739 591 289 9961 936 449 541
总计_jifies_2 = 17506
工作_备忘录_2 = 5619
因此,这段时间内的CPU使用率百分比为:
工作时间=工作量2-工作量1 = 68
一段时间内总计=总计jifies 2-总计jifies 1 = 1106
%cpu =工作超出周期/总超出周期 * 100 = 6.1%
wnavrhmk2#
尝试阅读
/proc/loadavg
,前三个数字是实际运行(即使用CPU)的进程数,分别是过去1、5和15分钟的平均值。http://www.linuxinsight.com/proc_loadavg.html
tjvv9vkg3#
读取
/proc/cpuinfo
以查找系统可用的CPU/内核数。调用getloadavg()
(或者读取/proc/loadavg
),取第一个值,乘以100(以转换为百分比),除以CPU/内核数。如果值大于100,则将其截断为100。完成。相关文件:
man getloadavg
和man 5 proc
注意:负载平均值(通常用于 *NIX系统)可超过100%(每个CPU/核心),因为它实际上测量调度程序准备运行的进程数。使用类似Windows的CPU度量,当负载为100%时,您无法真正知道这是CPU资源的最佳使用还是系统过载。在 *NIX下,CPU loadavg的最佳使用将为您提供约1.0的值(或对于双系统为2.0)。如果该值远大于CPU/内核数,则您可能需要将额外的CPU插入到机箱中。
否则,挖掘
/proc
文件系统。kkbh8khc4#
cpu-stat是一个C++项目,允许从/proc/stat读取Linux CPU计数器。
从cpu-stat的src目录获取CPUData.* 和CPUSnaphot.* 文件。
快速实施以获得整体cpu使用率:
编译:
afdcj2ne5#
目录/过程/状态
http://www.linuxhowtos.org/System/procstat.htm
2j4z5cfb6#
我建议从两个文件开始...
/处理器/状态和/处理器/CPU信息。
http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt
qco9c6ql7#
看看这个C++ Lib。
该信息从/proc/stat解析。它还从/proc/meminfo解析内存使用情况,从/proc/net/dev解析以太网负载