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()

Windows系统资源监控的更多相关文章

  1. lr设置监控本地和远程windows系统资源

    LoadRunner之设置监控本地和远程Windows系统资源   一般在客户端通过LoadRunner对服务器进行压力测试,都需要实时监控服务器端的系统资源,本篇主要简单介绍一下如何设置在LoadR ...

  2. 系统资源监控--windows

    前言: 系统资源监控一般监控系统的CPU,内存,磁盘和网络.系统分为windows和Linux.本篇主要记录windows. Windows的监控相对与Linux监控工具来说比较简单,更多的是查看wi ...

  3. Linux系统资源监控--linux命令、nmon和spotlight

    前言: 系统资源监控一般监控系统的CPU,内存,磁盘和网络.系统分为windows和Linux.本篇主要记录Linux. Linux系统资源监控常用命令及工具 一.常用命令:top.free.iost ...

  4. paip.windows io监控总结

    paip.windows io监控总结 io的主要参数是个.disk queue length 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专 ...

  5. Windows 回调监控 <二>

    在之前的文章Windows 回调监控 <一> 总结了关于CreateProcessNotify,CreateProcessNotifyEx和LoadImageNotify一些用法,之后产生 ...

  6. C# Windows IPSEC监控(仅此一家,别无分店)

    Windows IPSEC监控,使用C#编写,输出为一行字符串,可以按照既有IPSEC规则生成模板 using System; using System.Diagnostics; using Syst ...

  7. windows 进程监控 Procmon.exe

    windows 进程监控 Procmon.exe window下一个程序打开太慢,可以用此程序监控.在哪一步慢了,读取文件还是注册表. ProcessMonitor3.2 Process Monito ...

  8. Windows性能计数器监控实践

    Windows性能计数器(Performance Counter)是Windows提供的一种系统功能,它能实时采集.分析系统内的应用程序.服务.驱动程序等的性能数据,以此来分析系统的瓶颈.监控组件的表 ...

  9. python对 windows系统监控插件

    在python编程的windows系统监控中,需要监控监控硬件信息需要两个模块:WMI 和 pypiwin32 .

随机推荐

  1. Java中需要知道的关键字

    Java中有一些或常用,或不常用,但却不得不知关键字,本篇文章将讨论这些关键字的作用. transient transient关键字可能用的不是那么频繁,但却是一个很重要的关键字,它的作用是在对象序列 ...

  2. java 网络通信传输层协议——UDP和TCP

    本文原文由作者“zskingking”发表于:jianshu.com/p/271b1c57bb0b,本次收录有改动. 1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯网专注的即时通 ...

  3. Java异常处理:给程序罩一层保险

    文/沉默王二 人这一生,总会遇到一些不可预料的麻烦,这些麻烦可能会让我们遭受沉重的打击.为了减轻因此承受的负担,我们就会买保险. 本着负责任的态度,我们程序员在写代码的时候,都非常的严谨.但程序在运行 ...

  4. 《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常

    2.1 概述 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任 ...

  5. 使用ML.NET预测纽约出租车费

    有了上一篇<.NET Core玩转机器学习>打基础,这一次我们以纽约出租车费的预测做为新的场景案例,来体验一下回归模型. 场景概述 我们的目标是预测纽约的出租车费,乍一看似乎仅仅取决于行程 ...

  6. Hive 导入 parquet 格式数据

    Hive 导入 parquet 数据步骤如下: 查看 parquet 文件的格式 构造建表语句 倒入数据 一.查看 parquet 内容和结构 下载地址 社区工具 GitHub 地址 命令 查看结构: ...

  7. uWSGI 踩坑记

    一.协议的一致性 uWSGI 是在 nginx 后面,所以 nginx 转发请求时的协议要和 uWSGI 监听的协议一致.否则就会出现问题,因为是三者之间的通信,排查起来需要想清楚请求传递的次序: N ...

  8. 前端笔记之HTML5&CSS3(中)选择器&伪类伪元素&CSS3效果&渐变背景&过渡

    一.CSS3选择器 CSS3是CSS的第三代版本,新增了很多功能,例如:强大的选择器.盒模型.圆角.渐变.动画.2D/3D转换.文字特效等. CSS3和HTML5没有任何关系!HTML5骨架中,可以用 ...

  9. Chapter 4 Invitations——12

    "I don't know what you mean," I said, my voice guarded. “我不知道你什么意思”我声音谨慎地说道. "It's be ...

  10. .Net Core扩展 SharpPlugs简单上手

    SharpPlugs .Net Core 鋒利扩展,这是本人的开源项目 地址是 GitHub地址 大家喜欢 的话可以加个星哦 当前功能 DI AutoMapper ElasticSearch WebA ...