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

2024-11-01 08:41:00
admin
原创
277
摘要:问题描述:我正在尝试获取总 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
----------------------------------------------
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1120  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   75  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   66  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   76  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   70  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用