Dav*_*lák 37 c++ linux cpu-usage
我试图以%为单位获得总CPU使用率.首先我应该首先说"顶部"根本不会这样做,因为cpu转储之间存在延迟,它需要2个转储和几秒钟,这会挂起我的程序(我不想给它自己的线程)
接下来的事情我尝试的是"ps"这是即时的,但总是给出非常高的数字(20+),当我实际上得到我的cpu做一些事情,它停留在大约20 ...
有没有其他方法可以获得总CPU使用率?如果它超过一秒或更长的时间段并不重要......但更长的时期会更有用.
Hit*_*bat 80
cat/proc/stat
我同意上面这个答案.此文件中的cpu行给出了系统执行不同类型处理所花费的"jiffies"总数.
您需要做的是获取此文件的2个读数,按您需要的任何时间间隔分开.这些数字是增加值(受整数翻转影响),因此要获得%cpu,您需要计算在您的间隔内经过的jiffies数量,以及花费多少jiffies进行工作.
例如假设你在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%
希望有点帮助.
试试看/proc/loadavg.前三个数字分别是实际运行的进程数(即使用CPU),分别是过去1分钟,5分钟和15分钟的平均值.
http://www.linuxinsight.com/proc_loadavg.html
读取/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文件系统.
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;
}
Run Code Online (Sandbox Code Playgroud)
编译它:
g++ -std=c++11 -o CPUUsage main.cpp CPUSnapshot.cpp CPUData.cpp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60971 次 |
| 最近记录: |