取CPU利用率

#define _WIN32_WINNT   0x0501
#include <Windows.h>
#include <iostream> 
using   namespace   std;
__int64 CompareFileTime ( FILETIME time1, FILETIME time2 )
{
       __int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime ;
       __int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime ;
       return   (b - a);
}
void main() 
{ 
HANDLE hEvent;
BOOL res ;
FILETIME preidleTime;
FILETIME prekernelTime;
FILETIME preuserTime;
FILETIME idleTime;
FILETIME kernelTime;
FILETIME userTime;
res = GetSystemTimes( &idleTime, &kernelTime, &userTime );
preidleTime = idleTime;
prekernelTime = kernelTime;
preuserTime = userTime ;

hEvent = CreateEvent (NULL,FALSE,FALSE,NULL); // 初始值为 nonsignaled ,并且每次触发后自动设置为nonsignaled
while (1){

      WaitForSingleObject( hEvent,1000 ); //等待500毫秒
      res = GetSystemTimes( &idleTime, &kernelTime, &userTime );
     
       int idle = CompareFileTime( preidleTime,idleTime);
       int kernel = CompareFileTime( prekernelTime, kernelTime);
       int user = CompareFileTime(preuserTime, userTime);
int cpu = (kernel +user - idle) *100/(kernel+user);
     int cpuidle = ( idle) *100/(kernel+user);
     cout << "CPU利用率:" << cpu << "%" << "      CPU空闲率:" <<cpuidle << "%" <<endl;
  
    preidleTime = idleTime;
    prekernelTime = kernelTime;
    preuserTime = userTime ;
}


}

### CPU利用率的概念 CPU利用率是指一段时间内CPU实际工作时间占总可用时间的比例。它通常以百分比表示,用于衡量CPU的工作负荷以及系统的整体性能表现[^1]。 --- ### CPU利用率的计算方法 #### Windows 系统中的计算方式 在Windows系统中,可以通过任务管理器或其他第三方工具查看CPU利用率。然而,在多核处理器的情况下,CPU利用率的最大值并非固定为100%,而是决于核心数量。例如,对于一个四核处理器,其理论上的最大利用率可达400%[^2]。 #### Linux 系统中的计算方式 在Linux系统中,`/proc/stat` 文件提供了关于CPU时间分配的信息,其中包括用户态、系统态和空闲态下的时间片(单位为jiffies)。通过读该文件的数据并进行差分运算,可以得出实时的CPU利用率。具体公式如下: \[ \text{CPU Utilization} = 1 - \frac{\Delta\text{idle}}{\Delta(\text{total})} \] 其中: - \( \Delta\text{idle} \) 表示两次采样之间空闲状态增加的时间; - \( \Delta(\text{total}) \) 表示两次采样之间的总时间变化量[^3]。 #### Prometheus 中的计算方式 如果使用Prometheus作为监控工具,则可以根据 `node_cpu_seconds_total` 指标的统计数据来计算CPU利用率。典型的PromQL表达式如下所示: ```promql 100 * (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) ``` 此表达式的含义是:统计过去五分钟内的CPU闲置比例,并将其转换为利用率形式[^4]。 --- ### 如何优化CPU利用率 为了提高或调整CPU利用率至合理范围,可以从以下几个方面入手: 1. **分析性能瓶颈** 借助专业的CPU监控工具生成详细的性能报告,定位是否存在长期占用大量资源的应用程序或者服务。必要时考虑升级硬件配置以满足更高的处理需求[^1]。 2. **终止无用进程** 定期审查正在运行的任务列表,关闭那些消耗过多资源却未提供相应价值的服务或应用。 3. **平衡负载分布** 对于分布式架构而言,应确保各节点间的工作负担均衡,防止部分服务器因过载而导致效率下降甚至宕机风险。 4. **提升代码质量** 针对内部开发项目,持续改进算法设计与实现细节,减少不必要的循环操作及重复调用现象发生;同时也要注意数据库查询语句编写规范性等问题所在之处加以修正完善。 --- ### 实现简单的CPU利用率监测脚本 以下是基于Python语言编写的简易版跨平台CPU利用率检测程序片段: ```python import psutil import time def get_cpu_usage(interval=1): cpu_percentages = psutil.cpu_percent(interval=interval, percpu=True) total_percentage = sum(cpu_percentages)/len(cpu_percentages) return round(total_percentage, 2) if __name__ == "__main__": while True: usage = get_cpu_usage() print(f"Current CPU Usage: {usage}%") time.sleep(5) ``` 上述代码利用了psutil库的功能实现了每隔五秒钟打印一次当前计算机的整体CPU使用率功能[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值