欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Windows系统资源监控

程序员文章站 2022-03-15 10:17:22
1、windows自带系统资源监控工具 2、Windows监控的数据来源:Performance Counters 2.1 Performance Counter架构 2.2 Performance Counter数据结构 2.3 消费Performance Counter数据 3、使用基于PDH的 ......

 

 

1、windows自带系统资源监控工具

我们都知道,windows自带有系统资源监视器。主要有3个地方:

1) windows的任务管理器的性能页签,包括了cpu,内存,磁盘,网络等系统资源的监控。它主要监控系统资源的总体使用情况,使用它,我们可以发现是否有资源达到瓶颈了等等。

 Windows系统资源监控

 

2) windows资源监视器

这个工具可以看出系统资源到底是由哪些进程消耗的。通过它,可以快速查看到到底哪些进程占用了你的系统资源。

 Windows系统资源监控

3) 性能监视器

前两种工具已经提供你要监控的大部分功能,在某些情况下,可能仍然不能定位问题,这时候就需要你更进一步的了解系统的运行状况。那么这个工具就是一个不错的选择。

 Windows系统资源监控

 

2、windows 监控的数据来源:performance counters

       windows的这些监控工具之所以能够展示这些资源的情况,它们的数据来源都是一个叫performance counter的东东。

https://docs.microsoft.com/zh-cn/windows/desktop/perfctrs/performance-counters-portal

 

2.1 performancecounter 架构

performancecounter架构如下:

 Windows系统资源监控

 

 

采用了producer / consumer 架构,支持多种客户端从registry消费数据。

上图中,a 使用registry接口来消费数据,而b 和 performance monitor两个客户端则使用了pdh.dll来消费数据。

 

 

 

2.2 performance counter 数据结构

如果你想用程序来消费counter的数据,不论使用哪种api来消费数据,不论使用哪种工具来消费数据,都需要了解performance counter的领域语言,也就是说要了解它内部的数据是如何组织的。

 

它的基本概念如下:

machine:机器,这个没什么好说的,支持消费本机的监控数据,也可以消费其他其他的监控数据。

perfobject:可以理解为监控哪种资源,譬如说处理器,磁盘

instance:监控的资源可能有多个实例,多个网卡,多个cpu,多块磁盘等

counter:计数器,每一个instance都会有多个计数器,例如cpu的idle,user,interrupt都是一个counter

 


更直观的理解这些概念: 

 Windows系统资源监控

 

 

2.3 消费performance counter数据

       从上面的架构图来看可以使用registry api或者 pdh.dll ,或者wmi等3种方式来消费数据。这两种api是c或者c++开发的。

 

1)registry api :

https://docs.microsoft.com/zh-cn/windows/desktop/perfctrs/using-the-registry-functions-to-consume-counter-data

 

2)wmi:

https://docs.microsoft.com/zh-cn/windows/desktop/wmisdk/monitoring-performance-data

 

3)pdh api:

目前已知了两个版本:

c++:

https://docs.microsoft.com/zh-cn/windows/desktop/perfctrs/using-the-pdh-functions-to-consume-counter-data

 

python :

pywin32中有一个win32pdh的模块,就是python版本的pdh。

 

 

其他工具:

4)windows自带的typeperf命令

5)nsclient++

 

3、使用基于pdh的python客户端

 

win32pdh api说明:

使用win32pdh api的一个简易教程:

https://www.cac.cornell.edu/wiki/index.php?title=performance_data_helper_in_python_with_win32pdh

 

基于win32pdh 封装的一套api:

 Windows系统资源监控

 

 

 

最右侧是win32pdh模块,从python的仓库里下载即可。

windows_collector是我封装的核心代码,用于通过简单的代码,即可监控到系统资源。

最左边的则是来使用这套api的。使用这套api的好处是,不必去再花时间学习win32pdh这套api就可以轻松的获取你要的监控数据。

 

这套api的源码:

 Windows系统资源监控

Windows系统资源监控

Windows系统资源监控

Windows系统资源监控

 代码的命名规范不是 python的,想必看起来,也不会有太多的困难。

使用这套api,只需要简单的代码即可对系统资源进行监控,例如:

objectcollector("memory").collect()