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 .
随机推荐
- Netty浅析
Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章 netty使用初步.本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 ...
- Openssh版本升级修复漏洞
一.由于openssh版本过低当用扫描软件检测时会出现以下漏洞: 二.解决方案是升级高版本,下面是升级的步凑. 1.安装telnet工具,因为升级过程中怕失败或者重启ssh失败.我们直接yun安装即可 ...
- QWebView加载网页
开发环境:win10家庭中文版,vs2013,qt5.5.1 目的:使用webkit加载web页面代码如下: #include #include #ifdef _DEBUG#pragma commen ...
- 带着新人学springboot的应用12(springboot+Dubbo+Zookeeper 下)
上半节已经下载好了Zookeeper,以及新建了两个应用provider和consumer,这一节我们就结合dubbo来测试一下分布式可不可以用. 现在就来简单用一下,注意:这里只是涉及最简单的部分, ...
- RabbitMQ消息队列(五)-安装amqp扩展并订阅/发布Demo(.Net Core版)
publish发布消息 新建一个Asp.Net Core控制台项目:PublishDemo 安装Nuget包 Install-Package RabbitMQ.Client 添加命名空间引用 usin ...
- 【Java基础】【15Colletion集合】
15.01_集合框架(对象数组的概述和使用) A:案例演示 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. Student[] arr = new Stu ...
- 消息队列中间件(三)Kafka 入门指南
Kafka 来源 Kafka的前身是由LinkedIn开源的一款产品,2011年初开始开源,加入了 Apache 基金会,2012年从 Apache Incubator 毕业变成了 Apache 顶级 ...
- MEF 基础简介 三
MEF导出类的方法和属性 首先来说导出属性,因为这个比较简单,和导出类差不多,先来看看代码,主要看我加注释的地方,MusicBook.cs中的代码如下: using System; using Sys ...
- Android开发——获得Json数据,并显示图片
流程介绍 使用okhttp网络框架进行get请求,获得json数据 //一个封装好的工具类的静态方法 public static void sendOkHttpRequest(final String ...
- MySQL优化COUNT()查询
COUNT()聚合函数,以及如何优化使用了该函数的查询,很可能是最容易被人们误解的知识点之一 COUNT()的作用 COUNT()是一个特殊的函数,有两种非常不同的作用: 统计某个列值的数量 统计行数 ...