Windows系统资源监控
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 :
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++
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()
Windows系统资源监控的更多相关文章
- lr设置监控本地和远程windows系统资源
LoadRunner之设置监控本地和远程Windows系统资源 一般在客户端通过LoadRunner对服务器进行压力测试,都需要实时监控服务器端的系统资源,本篇主要简单介绍一下如何设置在LoadR ...
- 系统资源监控--windows
前言: 系统资源监控一般监控系统的CPU,内存,磁盘和网络.系统分为windows和Linux.本篇主要记录windows. Windows的监控相对与Linux监控工具来说比较简单,更多的是查看wi ...
- Linux系统资源监控--linux命令、nmon和spotlight
前言: 系统资源监控一般监控系统的CPU,内存,磁盘和网络.系统分为windows和Linux.本篇主要记录Linux. Linux系统资源监控常用命令及工具 一.常用命令:top.free.iost ...
- paip.windows io监控总结
paip.windows io监控总结 io的主要参数是个.disk queue length 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- Windows 回调监控 <二>
在之前的文章Windows 回调监控 <一> 总结了关于CreateProcessNotify,CreateProcessNotifyEx和LoadImageNotify一些用法,之后产生 ...
- C# Windows IPSEC监控(仅此一家,别无分店)
Windows IPSEC监控,使用C#编写,输出为一行字符串,可以按照既有IPSEC规则生成模板 using System; using System.Diagnostics; using Syst ...
- windows 进程监控 Procmon.exe
windows 进程监控 Procmon.exe window下一个程序打开太慢,可以用此程序监控.在哪一步慢了,读取文件还是注册表. ProcessMonitor3.2 Process Monito ...
- Windows性能计数器监控实践
Windows性能计数器(Performance Counter)是Windows提供的一种系统功能,它能实时采集.分析系统内的应用程序.服务.驱动程序等的性能数据,以此来分析系统的瓶颈.监控组件的表 ...
- python对 windows系统监控插件
在python编程的windows系统监控中,需要监控监控硬件信息需要两个模块:WMI 和 pypiwin32 .
随机推荐
- 6.Django session
session 1.概述 cookie和session的区别 Cookie是保存在用户浏览器端的键值对,Session是保存在服务器端的键值对:Cookie做用户验证的时,敏感信息不适合放在Cooki ...
- Java核心技术及面试指南 设计模式部分的面试题总结以及答案
8.6.4.1请实现一个线程安全的单例模式. 1 public class MailListReader { 2 private static MailListReader ...
- 死磕NodeJs之REPL与For Server,我的艰辛的旅程(一)
ode.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接 ...
- Chapter 4 Invitations——17
"Then why —"He shrugged. "I was hoping you were just letting him down easy." “这为 ...
- Asp.Net SignalR - 简单聊天室实现
简单聊天室 使用持久链接类我们就可以做一些即时通讯的应用了,我使用Group做了一个简单的聊天室,先上图技术细节下面再讲 可以加入聊天室.创建聊天室.发送消息,下面就说说我是如何通过Group做出来的 ...
- Docker Compose 原理
Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制.也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 do ...
- React Fiber源码分析 (介绍)
写了分析源码的文章后, 总觉得缺少了什么, 在这里补一个整体的总结,输出个人的理解~ 文章的系列标题为Fiber源码分析, 那么什么是Fiber,官方给出的解释是: React Fiber是对核心算法 ...
- .net core mvc 区域路由设置(配置)
写博客原因:添加了区域(用作后台)后,报错: An unhandled exception occurred while processing the request.AmbiguousActionE ...
- MVC防止CSRF攻击
可能我们大多数人做web的时候不会太注意这个问题,但是这是一个很重要的一个点.我们写代码写业务的时候也应该从各方面多思考. 首先就是先简单介绍下什么是CSRF CSRF 全程是 Cross-site ...
- JavaScript_02_JavaScript对象
ECMAScript标准中基本对象:Array,Boolean,Date,Math,Number,String,RegExp,Global Boolean,Date,Math,Number,Strin ...