`
haierboos
  • 浏览: 439610 次
文章分类
社区版块
存档分类
最新评论

Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率

阅读更多

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8678359

欢迎关注微博:http://weibo.com/MoreWindows

上一篇《Windows系统CPU内存网络性能统计第一篇内存》(http://blog.csdn.net/morewindows/article/details/8459219)介绍了在Windows系统下如何查看系统内存总量,使用率等信息。接下在将用三篇博客来介绍如何获取CPU整体使用率及多核CPU各核的使用率。

Windows系统CPU内存网络性能统计博客目录:

1.《Windows系统CPU内存网络性能统计第一篇内存》

http://blog.csdn.net/morewindows/article/details/8459219

2.《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》

http://blog.csdn.net/morewindows/article/details/8678359

3.《Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#》

http://blog.csdn.net/morewindows/article/details/8678382

4.《Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++》

http://blog.csdn.net/morewindows/article/details/8678396

如何获取CPU整体使用率及多核CPU各核的使用率在网上已经有很多文章了,在各大论坛上也有很多人在提问。本人在网上搜索了下,之前很多文章都是介绍使用ntdll.dll中一个未公开的API函数——NtQuerySystemInformation。基本代码结构如下:

//获得系统CPU使用率 By MoreWindows( http://blog.csdn.net/MoreWindows )

typedef LONG (WINAPI *PROCNTQSI)(UINT, PVOID, ULONG, PULONG);

pFunNtQuerySystemInf = (PROCNTQSI)GetProcAddress(GetModuleHandle("ntdll"), "NtQuerySystemInformation");

这种方法肯定不太好,这个API函数既然未公开,那么说明微软公司不支持开发应用程序时直接使用这个函数,并且在以后的系统升级中ntdll.dll很可能去掉这个API函数。经过本人MoreWindowshttp://weibo.com/MoreWindows)的实地测试,这种使用NtQuerySystemInformation的程序在Win7下都无法获取CPU使用率。

为了让我们的代码能在WinXP及Win7多系统中正常运行。本人实现了一个CCPUUseRate类。下面是这个CCPUUseRate类的实现代码:

// 获得系统CPU使用率
// http://blog.csdn.net/morewindows/article/details/8678359
// By MoreWindows( http://blog.csdn.net/MoreWindows )
// 先调用Initialize(),然后while(true){Sleep(1000);GetCPUUseRate();}就能获得CPU使用率。
// 经过测试,可以在WinXP及Win7下使用。
class CCPUUseRate
{
public:
	BOOL Initialize() 
	{
		FILETIME ftIdle, ftKernel, ftUser;
		BOOL flag = FALSE;
		if (flag = GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
		{
			m_fOldCPUIdleTime = FileTimeToDouble(ftIdle);
			m_fOldCPUKernelTime = FileTimeToDouble(ftKernel);
			m_fOldCPUUserTime = FileTimeToDouble(ftUser);

		}
		return flag;
	}
	//调用Initialize后要等待1秒再调用此函数
	int GetCPUUseRate()
	{
		int nCPUUseRate = -1;
		FILETIME ftIdle, ftKernel, ftUser;
		if (GetSystemTimes(&ftIdle, &ftKernel, &ftUser))
		{
			double fCPUIdleTime = FileTimeToDouble(ftIdle);
			double fCPUKernelTime = FileTimeToDouble(ftKernel);
			double fCPUUserTime = FileTimeToDouble(ftUser);
			nCPUUseRate= (int)(100.0 - (fCPUIdleTime - m_fOldCPUIdleTime) 
				/ (fCPUKernelTime - m_fOldCPUKernelTime + fCPUUserTime - m_fOldCPUUserTime) 
				*100.0);
			m_fOldCPUIdleTime = fCPUIdleTime;
			m_fOldCPUKernelTime = fCPUKernelTime;
			m_fOldCPUUserTime = fCPUUserTime;
		}
		return nCPUUseRate;
	}
private:
	double FileTimeToDouble(FILETIME &filetime)
	{
		return (double)(filetime.dwHighDateTime * 4.294967296E9) + (double)filetime.dwLowDateTime;
	}
private:
	double m_fOldCPUIdleTime;
	double m_fOldCPUKernelTime;
	double m_fOldCPUUserTime;
};

这个类的使用非常简单。先调用Initialize(),然后使用类似于如下代码

while(true)

{

Sleep(1000);

GetCPUUseRate();

}就能获得CPU使用率。

下面是使用范例,程序中printf\r可以参考《C/C++ 在控制台下显示进度》(http://blog.csdn.net/morewindows/article/details/6742078):

// Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率
// 经过测试,可以在WinXP及Win7下使用
//http://blog.csdn.net/morewindows/article/details/8678359
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main()
{
	printf("    Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率\n");  
	printf(" - http://blog.csdn.net/morewindows/article/details/8678359 -\n");
	printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");  

	CCPUUseRate cpuUseRate;
	if (!cpuUseRate.Initialize())
	{
		printf("Error! %d\n", GetLastError());
		getch();
		return -1;
	}
	else
	{
		while (true)
		{	
			Sleep(1000);
			printf("\r当前CPU使用率为:%4d%%", cpuUseRate.GetCPUUseRate());
		}
	}
	return 0;
}

WinXP系统运行结果如下(本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810):

Win7系统运行结果如下(本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810):

本文《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》(http://blog.csdn.net/morewindows/article/details/8678359)介绍的是如何获取CPU的整体使用率,现大多为多核的CPU,因此如何获取多核CPU各核的使用率了。请看下面二篇——

3Windows系统CPU内存网络性能统计第三篇 CPU 多核CPU各核使用率 C#

http://blog.csdn.net/morewindows/article/details/8678382

4Windows系统CPU内存网络性能统计第四篇 CPU多核CPU各核使用率 C++

http://blog.csdn.net/morewindows/article/details/8678396

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5160810

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8678359

欢迎关注微博:http://weibo.com/MoreWindows



分享到:
评论

相关推荐

    Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率.rar

    Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率.rar

    WindowsVC++获取CPU整体使用率

    《Windows系统CPU内存网络性能统计第二篇 CPU CPU整体使用率》 http://blog.csdn.net/morewindows/article/details/8678359 配套程序。 讲解了在Windows系统下使用VC++获取系统CPU整体使用率。已经测试,能运行于...

    获取进程cpu使用率

    可以获取单个多个进程cpu的使用率,ms没有提供获取cpu使用率的方法,目前有几种...通过windows性能计数器(PDH库) 这里提供了第一种方法,由于第二种方法问题较多,而且不能保证系统中已经安装了windows性能计数器

    获取CPU占用率(利用率)信息

    注意:请不要下载这个,已经更新为V2版本,解决了一些错误。请下载V2版本 无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过

    仿360悬浮球实现系统内存和cpu利用率实时展示(含项目源码)

    1、使用java的Jframe开发!未引用任何第三方插件!自动隐藏任务栏显示!可最小化为系统托盘!右键菜单可彻底退出释放!...5、备注:使用exe4j生成的exe文件,jre请自行压缩瘦身,左边球为内存,右边为cpu。

    JMeter高级性能测试实战教程

    分享一套JMeter高级视频教程——《JMeter高级性能测试实战》,课程一共30章,配套有相关文档下载! 课程大纲: 第1章课程介绍 ...第19章压力和cpu/内存/网络/io使用率及软中断和上下文切换关系 第20章如何对文

    1服务器巡检报告.docx

    查看CPU情况 CPU占用率在50%之下 内存使用情况 使用远程桌面连接到服务器,查看CPU情况 内存使用率不高于80% 硬盘使用情况 使用远程桌面查看服务器的硬盘使用情况 硬盘使用率不高于正常水平 网络 连接 查看端 口状态...

    服务器硬件性能.pptx

    服务器硬件性能 CPU 内存 硬盘 网卡 服务器硬件性能全文共23页,当前为第2页。 CPU性能 节能模式 NUMA CPU利用率计算 服务器硬件性能全文共23页,当前为第3页。 CPU节能模式 好处:在CPU使用率不高时,自动降频,...

    Java进程CPU使用率高排查

    近期java应用,CPU使用率一直很高,经常达到,通过以下步骤完美解决,分享一下。  1.jps 获取Java进程的PID。  2.jstack pid &gt;&gt; java.txt 导出CPU占用高进程的线程栈。  3.top -H -p PID 查看对应进程的哪个...

    Linux系统的性能评估和调优指南

    CPU使用率高并不总是意味着CPU工作繁忙,它有可能是正在等待其他子系统。在进行性能分析时,将所有子系统当做一个整体来看是非常重要的,因为在子系统中可能会出现瀑布效应。  注释:有种常见的错误观念认为CPU是...

    服务器监控及性能优化.pptx

    服务器系统健康监控体系 硬件监控项 CPU使用率 内存使用率 硬盘使用率 内网网卡使用率 外网网卡使用率 磁盘IO 服务器监控及性能优化全文共27页,当前为第6页。 服务器系统健康监控体系 服务器监控及性能优化全文共...

    服务器运行状态监控系统.docx

    主要包括:CPU使用率、内存使用率、进程数量监控、进程运行状况监控等。 (2) 采集服务器的相关信息,并保存在服务器的日志文件中,供网络管理员进行定期的数据分析。主要包括:重点分区文件的变动信息、容量大小信息...

    系统监控管理办法.docx

    设备硬件监控:包括CPU利用率、内存使用率、硬盘使用率,各硬件之间的I/O吞吐情况、空调运行情况、UPS运行情况等。 3.程序及进程监控:包括前端运行程序,后台服务程序或进程、数据库系统以及中间件程序等。 第五条...

    oracle动态性能表

    正因如此多的性能数据,检查某区间内系统资源使用情况可以这样做,在一个时间段开始时创建一个视图数据快照,结束时再创建一个,二者之间各统计项值的不同(end value - begin value)即是这一时间段内的资源消耗情况...

    构建高性能Web站点(PDF)-第2部分

    此文档一共两部分,此下载链接为第2部分。 第1章 绪论 1.1 等待的真相 1.2 瓶颈在哪里 1.3 增加带宽 1.4 减少网页中的HTTP请求 1.5 加快服务器脚本计算速度 1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将...

    服务器设备巡检表.docx

    设备名称 CDM(U8)数据库服务器 备份服务器 检查人 签字 检查日期 前面板 指示灯 磁盘 指示灯 系统风扇运转 Cpu平均使用率 内存平均使用率 磁盘使用情况 网络 连接 日志 检查 系统 漏洞 系统防 病毒 日志 备份 磁盘 ...

    Linux杀不死的进程之CPU使用率700%解决方法

    发现有个进程CPU使用率居然700%,COMMAND 是一些随机的字符串组成,完了~ 中标了;第一想到就是“沙雕”它,kill 命令给我上。 [root@zwlbs3 ~]# kill -9 PID ii. 但是发现 kill 该进程平静一会后又启动了。 注:...

    服务器运维管理手册.doc

    进程监控 任务管理器——进程 查看进程的CPU使用率和内存使用率是否超阀值 3. CPU性能 任务管理器——性能 查看CPU最高峰值与一般使用率是否超阀值 4. 内存性能 任务管理器——性能 查看内存最高峰值与一般使用率...

    服务器指标要求(2021整理).docx

    1〕能以图形化实时显示系统的CPU、内存、磁盘与网络资源等的资源使用情况,实现如下监控功能: CPU:多处理器系统中每个处理器的CPU使用率、CPU运行的队列长度、系统呼叫次数以及中断及环境交换机的操作频率; 内存:...

    服务器指标要求:.docx

    1)能以图形化实时显示系统的CPU、内存、磁盘与网络资源等的资源使用情况,实现如下监控功效: CPU:多处置惩罚器系统中每个处置惩罚器的CPU使用率、CPU运行的行列长度、系统呼唤次数以及中断及情况互换机的操纵频率...

Global site tag (gtag.js) - Google Analytics