如何使用 C++ 获取 Linux 中的 CPU 总使用率

2024-11-01 08:41:00
admin
原创
348
摘要:问题描述:我正在尝试获取总 CPU 使用率(以百分比表示)。首先,我应该说“top”根本行不通,因为 CPU 转储之间有延迟,它需要 2 次转储和几秒钟的时间,这会挂起我的程序(我不想给它自己的线程)我接下来尝试的是“ps”,虽然很即时,但总是给出非常高的总数字(20+),而当我真正让我的 CPU 做某事时,...

问题描述:

我正在尝试获取总 CPU 使用率(以百分比表示)。首先,我应该说“top”根本行不通,因为 CPU 转储之间有延迟,它需要 2 次转储和几秒钟的时间,这会挂起我的程序(我不想给它自己的线程)

我接下来尝试的是“ps”,虽然很即时,但总是给出非常高的总数字(20+),而当我真正让我的 CPU 做某事时,它停留在 20 左右......

还有其他方法可以获取总 CPU 使用率吗?无论是超过一秒还是更长的时间都没关系……不过,更长的时间会更有用。


解决方案 1:

猫/proc/stat

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

我同意上面的答案。此文件中的 cpu 行给出了系统执行不同类型的处理所花费的“jiffies”总数。

您需要做的是读取此文件两次,每次读取间隔为您需要的时间间隔。数字是递增值(受整数翻转影响),因此要获取 %cpu,您需要计算间隔内经过了多少个 jiffies,以及执行工作花费了多少个 jiffies。

例如,假设在 14:00:00 你有

中央处理器 4698 591 262 8953 916 449 531

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

work_jiffies_1 =(用户、nice、系统的总和 = 前 3 个值)= 5551

在 14:00:05 时你有

中央处理器 4739 591 289 9961 936 449 541

总 jiffies_2 = 17506

工作时间_2 = 5619

因此这段时间内的 %cpu 使用率为:

工作周期 = 工作时长_2 - 工作时长_1 = 68

总周期数 = 总时延_2 - 总时延_1 = 1106

%CPU = 工作时间 / 总工作时间 * 100 = 6.1%

解决方案 2:

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

解决方案 3:

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

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

解决方案 4:

阅读/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文件系统。

解决方案 5:

猫/proc/stat

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

解决方案 6:

我建议从两个文件开始......

/proc/stat 和 /proc/cpuinfo。

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

解决方案 7:

看看这个 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
----------------------------------------------
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用