咱们都知道,Windows自带有系统资源监视器。主要有3个地方:php
1) Windows的任务管理器的性能页签,包括了CPU,内存,磁盘,网络等系统资源的监控。它主要监控系统资源的整体使用状况,使用它,咱们能够发现是否有资源达到瓶颈了等等。html
2) Windows资源监视器python
这个工具能够看出系统资源究竟是由哪些进程消耗的。经过它,能够快速查看到到底哪些进程占用了你的系统资源。windows
3) 性能监视器网络
前两种工具已经提供你要监控的大部分功能,在某些状况下,可能仍然不能定位问题,这时候就须要你更进一步的了解系统的运行情况。那么这个工具就是一个不错的选择。数据结构
Windows的这些监控工具之因此可以展现这些资源的状况,它们的数据来源都是一个叫Performance Counter的东东。架构
https://docs.microsoft.com/zh-cn/windows/desktop/PerfCtrs/performance-counters-portal工具
PerformanceCounter架构以下:性能
采用了Producer / Consumer 架构,支持多种客户端从Registry消费数据。学习
上图中,A 使用Registry接口来消费数据,而B 和 Performance Monitor两个客户端则使用了pdh.dll来消费数据。
若是你想用程序来消费Counter的数据,不论使用哪一种API来消费数据,不论使用哪一种工具来消费数据,都须要了解Performance Counter的领域语言,也就是说要了解它内部的数据是如何组织的。
它的基本概念以下:
Machine:机器,这个没什么好说的,支持消费本机的监控数据,也能够消费其余其余的监控数据。 perfObject:能够理解为监控哪一种资源,譬如说处理器,磁盘 instance:监控的资源可能有多个实例,多个网卡,多个CPU,多块磁盘等 counter:计数器,每个instance都会有多个计数器,例如cpu的idle,user,interrupt都是一个counter
更直观的理解这些概念:
从上面的架构图来看可使用registry API或者 PDH.dll ,或者wmi等3种方式来消费数据。这两种API是C或者C++开发的。
1)Registry API :
2)WMI:
https://docs.microsoft.com/zh-cn/windows/desktop/WmiSdk/monitoring-performance-data
3)PDH API:
目前已知了两个版本:
C++:
Python :
Pywin32中有一个win32pdh的模块,就是python版本的pdh。
https://pypi.org/project/pywin32/
http://timgolden.me.uk/pywin32-docs/win32pdh.html
其余工具:
4)windows自带的typeperf命令
5)nsclient++
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()