通过性能计数器(Process)来获取某个进程的CPU使用率、内存使用量、磁盘读写速率
来源:互联网 发布:淘宝好评模板100字 编辑:程序博客网 时间:2024/06/01 07:56
本篇文章是在上次获取整个系统性能数据的延伸。
需求:获取某个进程(已知进程名)的CPU使用率、内存使用量、磁盘读写速率
实现:通过windows自带的性能计数器中的Process实现
与之前获取整个系统性能数据的流程是一样的,打开性能计数器——添加性能计数器——获取数据。
下面是具体的性能计数器查询语句,"tfb_manage_system"是进程名(tfb_manage_system.exe)。
获取CPU使用率:"\\Process(tfb_manage_system)\\% Processor Time" ps:需要注意一点,这里拿到的数据是对于单核CPU的使用率,所以,对于整个系统的使用率,需要将本数据除以系统CPU核心数量。比如拿到的数据是80%,系统是四核,那该进程真实的CPU占用率是80 / 4 = 20%。
获取内存使用量:"\\Process(tfb_manage_system)\\Working Set - Private" 获取的专用内存使用量。单位是字节
获取磁盘读速率:"\\Process(tfb_manage_system)\\IO Read Bytes/sec" 单位是字节 / 秒
获取磁盘写速率:"\\Process(tfb_manage_system)\\IO Write Bytes/sec" 单位是字节 / 秒
下面是实现代码:
/*通过性能计数器获取某个进程的CPU使用率、内存使用量、磁盘读写速率使用性能计数器中的Process实现*/#pragmacomment(lib,"pdh")#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <locale.h>#include <pdh.h>#include <pdhmsg.h>#include <tchar.h>#include <windows.h>int nCPU;int GetData(){HQUERY query; double dbVal;long iVal;PDH_STATUS status = PdhOpenQuery(NULL, NULL, &query); if (ERROR_SUCCESS != status) { MessageBox(NULL,TEXT("打开失败"),TEXT(""),MB_OK); return -1; }HCOUNTER cntProcessCPU, cntProcessMemory;HCOUNTER cntProcessDiskRead, cntProcessDiskWrite;status = PdhAddCounter(query, "\\Process(tfb_manage_system)\\% Processor Time", NULL, &cntProcessCPU);status = PdhAddCounter(query, "\\Process(tfb_manage_system)\\Working Set - Private", NULL, &cntProcessMemory);status = PdhAddCounter(query, "\\Process(tfb_manage_system)\\IO Read Bytes/sec", NULL, &cntProcessDiskRead);status = PdhAddCounter(query, "\\Process(tfb_manage_system)\\IO Write Bytes/sec", NULL, &cntProcessDiskWrite);if (ERROR_SUCCESS != status) { MessageBox(NULL,TEXT("添加失败"),TEXT(""),MB_OK); return -1; }status = PdhCollectQueryData(query); Sleep(500); //这里要有延时不然结果相当不准确 status = PdhCollectQueryData(query); if(ERROR_SUCCESS != status) { MessageBox(NULL,TEXT("数据请求失败"),TEXT(""),MB_OK); return -1; } PDH_FMT_COUNTERVALUE pdhValue; DWORD dwValue; status = PdhGetFormattedCounterValue(cntProcessCPU, PDH_FMT_DOUBLE, &dwValue, &pdhValue); if(ERROR_SUCCESS != status) { MessageBox(NULL,TEXT("得到数据失败"),TEXT(""),MB_OK); return -1; }else{dbVal = pdhValue.doubleValue; printf("Process-CPU: %3d%% ", (int)(dbVal/nCPU+0.5));}status = PdhGetFormattedCounterValue(cntProcessMemory, PDH_FMT_DOUBLE, &dwValue, &pdhValue); if(ERROR_SUCCESS != status) { MessageBox(NULL,TEXT("得到数据失败"),TEXT(""),MB_OK); return -1; }else{dbVal = pdhValue.doubleValue; printf("Process-Memory: %8dK \n", (int)(dbVal/1024));}status = PdhGetFormattedCounterValue(cntProcessDiskRead, PDH_FMT_DOUBLE, &dwValue, &pdhValue); if(ERROR_SUCCESS != status) { MessageBox(NULL,TEXT("得到数据失败"),TEXT(""),MB_OK); return -1; }else{dbVal = pdhValue.doubleValue; printf("Process-DiskRead:%8dK/s ", (int)(dbVal/1024));}status = PdhGetFormattedCounterValue(cntProcessDiskWrite, PDH_FMT_DOUBLE, &dwValue, &pdhValue); if(ERROR_SUCCESS != status) { MessageBox(NULL,TEXT("得到数据失败"),TEXT(""),MB_OK); return -1; }else{dbVal = pdhValue.doubleValue; printf("Process-DiskWrite:%8dK/s \n*****************************************************************************\n", (int)(dbVal/1024));}PdhRemoveCounter(cntProcessCPU);PdhRemoveCounter(cntProcessMemory);PdhRemoveCounter(cntProcessDiskRead);PdhRemoveCounter(cntProcessDiskWrite);PdhCloseQuery(query);}int main() {setlocale(LC_ALL,"chs");SYSTEM_INFO si;GetSystemInfo(&si);nCPU = si.dwNumberOfProcessors;while(1){Sleep(500);GetData();}system("pause");return 0;}
阅读全文
0 0
- 通过性能计数器(Process)来获取某个进程的CPU使用率、内存使用量、磁盘读写速率
- 使用PDH性能计数器(Windows)获取CPU使用率、可用物理内存、上传/下载速率、磁盘读写速率
- 获取cpu、内存、磁盘的使用率
- 使用PDH性能计数器获取CPU使用率网卡信息等
- 获取当前进程的CPU使用率和内存使用
- java获取JVM的CPU占用率、内存占用率、线程数及服务器的网口吞吐率、磁盘读写速率
- 获取CPU,内存使用率,磁盘相关信息
- 统计某个进程的cpu使用率使用top命令
- 获取系统的CPU使用率、内存使用率
- python获取全部进程的CPU、内存使用率
- 转载:python获取全部进程的CPU、内存使用率
- 获取某个进程的CPU使用情况
- java获取cpu使用率/内存使用率/硬盘的使用率
- java获取cpu使用率/内存使用率/硬盘的使用率
- java获取cpu使用率/内存使用率/硬盘的使用率
- 获取进程cpu使用率
- Linux Java 获取CPU使用率,内存使用率,磁盘IO,网络带宽使用率等等
- linux服务器性能——CPU、内存、流量、磁盘使用率的监控
- asp 指定读取前几条记录
- Android的Activities相关状态及知识
- iOS KVO模式
- 从源码解析computescroll()方法与invalidate()的关系
- ios中的图片大小关系
- 通过性能计数器(Process)来获取某个进程的CPU使用率、内存使用量、磁盘读写速率
- just for test
- c#中利用结构体进行socket传输数据
- 18、react之 react-redux
- MYSQL解压版安装及常用命令
- android studio生成aar包并在其他工程引用aar包
- win 下 批量修改文件名
- mysql配置文件--explicit_defaults_for_timestamp
- 03_Qt的事件传递、消息过滤器和消息通知(类与类之间通讯)