Windows系统资源监控

发布于:2021-09-25 11:06:08

1、windows自带系统资源监控工具2、Windows监控的数据来源:Performance Counters
2.1 Performance Counter架构2.2 Performance Counter数据结构2.3 消费Performance Counter数据3、使用基于PDH的python客户端

?


?


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

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


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


?


?


2) Windows资源监视器


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


?


3) 性能监视器


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


?


?


2、Windows 监控的数据来源:Performance Counters

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


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


?


2.1 PerformanceCounter 架构

PerformanceCounter架构如下:


?


?


?


采用了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

?




?


?


?


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。


https://pypi.org/project/pywin32/


http://timgolden.me.uk/pywin32-docs/win32pdh.html


?


?


其他工具:


4)windows自带的typeperf命令


5)nsclient++


?


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

?


Win32pdh API说明:


http://timgolden.me.uk/pywin32-docs/win32pdh.html


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


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


?


基于win32pdh 封装的一套API:


?


?


?


?


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


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


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


?


这套API的源码:


?





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


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



ObjectCollector("Memory").collect()

?



转载于:https://www.cnblogs.com/f1194361820/p/9519334.html






相关资源:windows service服务监控工具

相关推荐

最新更新

猜你喜欢