云顶娱乐平台 18

云顶娱乐平台:Windows系统资源监控

2.2 Performance Counter 数据结构

如果你想用程序来消费Counter的数据,不论使用哪种API来消费数据,不论使用哪种工具来消费数据,都需要了解Performance
Counter的领域语言,也就是说要了解它内部的数据是如何组织的。

 

它的基本概念如下:

Machine:机器,这个没什么好说的,支持消费本机的监控数据,也可以消费其他其他的监控数据。

perfObject:可以理解为监控哪种资源,譬如说处理器,磁盘

instance:监控的资源可能有多个实例,多个网卡,多个CPU,多块磁盘等

counter:计数器,每一个instance都会有多个计数器,例如cpu的idle,user,interrupt都是一个counter

 

云顶娱乐平台:Windows系统资源监控。更直观的理解这些概念: 

 云顶娱乐平台 1

 

 

Request Execution Time

从pycharm下下载pyserial后其结构如图所示:

[HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INImyodbc driver]
“UsageCount”=dword:00000002
“Driver”=”C:WINNTSystem32myodbc.dll”
“Setup”=”C:WINNTSystem32myodbc.dll”
“SQLLevel”=”1”
“FileUsage”=”0”
“DriverODBCVer”=”02.50”
“ConnectFunctions”=”YYY”
“APILevel”=”1”
“CpTimeout”=”120”
[HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INIODBC Drivers]
“myodbc driver”=”installed”

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

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

 

在.NET Framework下有个程序集

稍微一查即可指导核心是serialwin32(win环境下)下的serial类,其继承自serialutil.py下的SerialBase类,同时还使用了win32.py文件,因此问题分解为win32是干什么的?SerialBase负责什么部分?serialutil要干哪些活?serial是如何将这些串起来的?

2。第二种是使用myodbc驱动程序。
你可以到www.mysql.com下载myodbc驱动程序,然后照着下面的做就可以了第一种选择是下载完全安装包,这种包很大,但对于我们来说有用的只有myodbc.dll这个文件,却要下载这么大的文件,不太合适。当然,如果你很菜的话,我建议你选择这种方式,这样容易些,但不符合cfans的作风,是吧。
第二种是直接下载myodbc.dll文件,只有几百k,但不太容易使用,本人经过很久摸索才找到使用它的方法。首先你将包解开,将myodbc.dll
文件放到windowssystem 或
winntsystem32目录下,这取决于你的系统是win9x还是winnt(win2k),你应该知道吧。
然后打开一纯文本编辑器,如editplus,notpad之类,(取决于你的喜好)将下面一段话保存为一文件,扩展名为.reg,知道了吧,这是注册表文件,不要搞错呀(不包括下面的一长串等号)
如果你用的是win2k请将第一行换成
Windows Registry Editor Version 5.00

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

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

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

 云顶娱乐平台 2

 

2) Windows资源监视器

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

 云顶娱乐平台 3

3) 性能监视器

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

 云顶娱乐平台 4

 

云顶娱乐平台 5
图1云顶娱乐平台 6
图2

针对第一个问题:win32是干什么的?

1.使用mysql提供的api函数库。
很多有名的mysql客户端工具就是这样实现的,大名鼎鼎的winmysql工具就是这样的。这在大部分的开发工具中都可以实现。比如vc,bcb,delphi,vb等,只要能调用第三方的api就能实现。但对程序员的要求很高,而且要熟悉一套mysql的api函数集,这不是对每个人都很轻松的事。而且这种方法不能用于asp等程序,因为它不支持com对象。

 

 

看到网上说的Pywin32可以像VC一样的形式来使用PYTHON开发win32应用,我就下载了个,但是不会使用,有基本的入门教程吗,或者谁给说说,比如说画界面什么的!

Python没有自带访问windows系统API的库的,需要下载第三方库。库的名称叫pywin32,可以从网上直接下载,下载链接:http://sourceforge.net/projects/pywin32/files%2Fpywin32/(下载适合的Python版本)

使用中如果出现ImportError: No module named win32api 或者出现
ImportError: No module named win32con,说明你的库没有安装好。

介绍这个库里面最重要的两个模块:win32api和win32con(也就是说在windows下安装win32all.exe之后会生成一个库,这个库里面就有win32api和win32con以及win32file,分别管不同的部分)

win32api顾名思义,就是用python对win32的本地api进行了封装;win32con个人理解为win32constant,即win32的常量定义。

==========================================================从下行开始

2.3 消费Performance Counter数据

       从上面的架构图来看可以使用registry API或者 PDH.dll
,或者wmi等3种方式来消费数据。这两种API是C或者C++开发的。

 

1)Registry API :

 

2)WMI:

 

3)PDH API:

目前已知了两个版本:

C++:

 

Python :

Pywin32中有一个win32pdh的模块,就是python版本的pdh。

 

 

其他工具:

4)windows自带的typeperf命令

5)nsclient++

 

但是真正需要做这些性能计数器的安装/卸载,计数,读取还是需要大量的代码,通过封装来简化编程接口。对于使用WCF来实现的服务,可以基于WCF的扩展性,进行进一步的封装。

这里是网上讨论API的一些言论:

Windows Registry Editor Version 4.00

 

性能计数器可以获得应用程序性能的实时度量数据,而不需要通过记日志,进行另外的处理。而且性能计数器可以远程查看,可以通过管理工具(MOM)进行管理。在损耗上也非常的小。

云顶娱乐平台 7

很多有名的mysql客户端工具就是这样实现的,大名鼎鼎的winmysql工具就是这样的。这在大部分的开发工具中都可…

  • 1、windows自带系统资源监控工具
  • 2、Windows监控的数据来源:Performance
    Counters

    • 2.1 Performance
      Counter架构
    • 2.2 Performance
      Counter数据结构
    • 2.3 消费Performance
      Counter数据
  • 3、使用基于PDH的python客户端

性能计数器采用的是客户端服务器结构,性能数据采用共享内存存储,在应用中自定义性能计数器,在应用程序调用的时候调用性能计数器进行计数。体系结构如下:

_init_.py负责实现平台兼容,其实就是在导入这个包的时候根据平台来选择不同的处理类,我的是windows系统因此跑到serialwin32.py文件下去跟踪源码,第一行代码就是

2.1 PerformanceCounter 架构

PerformanceCounter架构如下:

 云顶娱乐平台 8

 

 

采用了Producer / Consumer 架构,支持多种客户端从Registry消费数据。

上图中,A 使用Registry接口来消费数据,而B 和 Performance
Monitor两个客户端则使用了pdh.dll来消费数据。

 

 

 

Requests Failed

首先,API的意思是Application Program Interface,应用程序接口.

实际上,只要是程序,都可以对外提供API,比如你写一个网站.然后对外提供API,任何人都可以通过你提供的API获取到对应的信息.例如你网站中的数据.

win32
API是windows系统提供的API,

.NET 也可以提供API

虽然提供的作用可能会有重合,但是不影响说,其实这是两个不同程序提供的API.

不能因为说windows提供了API,那么.NET就不能提供API了.

而且.NET的API虽然很多是对WINDOWS的封装,但是这样可以避免一个人要学习.NET.还必须要去学习WINDOWS的API.

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

 

Win32pdh API说明:

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

 

基于win32pdh 封装的一套API:

 云顶娱乐平台 9

 

 

 

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

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

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

 

这套API的源码:

 云顶娱乐平台 10

云顶娱乐平台 11

云顶娱乐平台 12

云顶娱乐平台 13

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

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

ObjectCollector("Memory").collect()

 

Requests Completed

浅谈python中使用C/C++:ctypes

.Net最佳实践3:使用性能计数器收集性能数据

云顶娱乐平台 14

Requests Executing

然而动态链接库又是啥?跟静态链接库有啥区别?

实际上,可以通过编写程序来访问所有的Windows性能计数器。Windows中,注册表是访问性能计数器的一种机制。性能信息并不实际存在于注册表中,在注册表编辑器RegEdit.exe中是无法查看的,但可以通过注册表函数来访问,利用注册表键来获得从性能数据提供者那里提供的数据。打开名为HKEY_PERFORMANCE_DATA的特殊键,利用RegQueryValueEx函数查询键下面的值,就可以直接访问注册表性能计数器信息。当然,也可以利用性能数据帮助器(PDH,
Performance Data Helper) API (Pdh.dll)来访问性能计数器信息。

ctypes是python的一个外部函数库,提供和C语言兼容的数据类型,可以直接调用动态链接库中的导出函数。

三、性能计数器的架构

然后在网上找学习经验,突然想到这个包当初肯定是有个起点的,起点是容易理解且不复杂的,解决一个单一问题的,就像我自己写框架一样(即先快速做出功能、原型,然后再反复迭代改进)。

Requests/Hour

import    win32file   #The base COM port and file IO functions.

二、HKEY_PERFORMANCE_DATA数据组织

其中最底下三个貌似是有点问题的,比如release0_1和2是并口的文件,last-svn-state是无法运行的,因此从release1_0下手,

Monitor your SQL
Server

我查看serial文件,发现里面有

在命名空间System.Diagnostic提供了一组性能计数器类,包括PerformanceCounterCategory,PerformanceCounter,PerformanceCounterInstaller,CouterSample等等。

在读源码的时候可以看到使用了一个:win32file.OVERLAPPED()

性能对象有两种:一种是单实例对象,另一种是多实例对象。图2和图3分别描述了这两种性能对象的数据组织方式。每个对象数据块包含了一个PERF_OBJECT_TYPE结构,描述对象的性能数据。紧随其后是PERF_COUNTER_DEFINITION结构列表,描述了性能对象的全部计数器定义。对于单实例对象,计数器定义列表后是一个PERF_COUNTER_BLOCK结构,计数器数据紧随其后。每个PERF_COUNTER_DEFINITION结构中定义了计数器数据相对于PERF_COUNTER_BLOCK的偏移量,因此可以非常方便地获得全部计数器的值。对支持多实例性能对象来说,PERF_COUNTER_DEFINITION结构列表之后是一组实例信息数据块,每个表示代表一个对象实例。每个实例信息数据块由一个PERF_INSTANCE_DEFINITION结构体、实例名和一个PERF_COUNTER_BLOCK结构体组成。后面是计数器值数据,与单实例对象相同。

聊聊Python ctypes
模块

云顶娱乐平台 15

总的来说,pywin32就是在python跟windows系统API之间建立一个桥梁,中间件,可以在python下直接windows编程。而win32file是其中的一个组成部分,因此我们追根究底追到这基本上就可以打住了(知道提供哪些API就行了),因为再往下的话就是windows系统编程了。

文件结构

云顶娱乐平台 16

各个发行版本

性能监视,是Windows NT提供的一种系统功能。Windows
NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器。性能对象,就是被监视的对象,典型例子有Processor、Process、Memory、TCP/UDP/IP/ICMP、PhysicalDisk等。计数器通常提供操作系统、应用程序、服务、驱动程序等的性能相关信息,以此来分析系统瓶颈和对系统及应用程序性能进行诊断和调优。性能计数器机制让应用程序和操作系统组件可以向性能监视应用程序,比如性能监视器(Performance
Monitor),报告一些与性能有关的统计信息。PerfMon.exe中可以查看性能对象、性能计数器和对象实例,可通过添加计数器来查看相关描述信息。

win32下有一些DLL文件,那么DLL是啥?ctypes是啥?

一、概述

win32file是个啥?包文件夹里面并没有这个文件,那么是在在哪导入的呢?

在.NET中性能计数器有良好的抽象封装,实现起来比C/C++容易得多。我们在应用经常只关注一些请求类型的数据度量,例如下述:

windows编程的API

Overlapped
I/O是win32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行中仍然能够继续处理事物。Overlapped
I/O的基本形式是以ReadFile和WriteFile函数完成的。

WaitCommEvent(handle, overlapped)

Waits for an event to occur for a specified communications device. The
set of events that are monitored by this function is contained in the
event mask associated with the device handle.

Return Value

The result is a tuple of (rc, mask_val), where rc is zero for
success, or the result of calling GetLastError() otherwise.  The
mask_val is the

new mask value once the function has returned, but if an Overlapped
object is passed, this value will generally be meaningless.  See the

comments for more details.

四、.NET性能计数器实现

然后就在github官网找到了它的各个版本:

Requests/5Min

假如硬是有人要缺根径,一定要追的话,那估计再往下得到系统驱动层的api,再往下到bsp层的api,再往下到汇编测api,因此其实最底下的思路还不是就这样—封装(例如ATC上层无论你整的多么复杂多么多的api,我再最底层就是一个单片机通过串口交互些数据,因此只要把单片机的功能划分好定义好数据结构及api,以后的高楼大厦都是基于此的,因此懂就好,要跳出来,不求甚解,抓住轮廓,当然前提是我从底层的硬件设计、驱动程序到上位的程序都写过才会有这个理解,假如那些一直写上位机代码的人估计会对底层的运行机制心虚吧~)

Requests/Sec

结构图

(C:WINDOWSMicrosoft.NETFrameworkv2.0.50727perfcounter.dll)实现了性能计数器功能,包括性能计数器的安装/卸载,值的读写。

在这之前还得知道pyd是啥文件:(源自:http://proupy.com/news/33)

Requests Started

DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。打不开,不过可以使用反汇编;

PYD是一种PYTHON动态模块。实质上还是dll文件,只是改了后缀为PYD,pyd:

首先是我们最常见的.py文件。以.py扩展名的文件是源代码文件,由python.exe解释,可在控制台下运行。当然也可以用文本编辑器进

行修改。

接下来介绍的是.pyc文件。以.pyc为扩展名的是python的编译文件。.pyc文件是不能够用文本编辑器之类的进行编辑的,但是同样它的

优点在于.pyc文件的执行速度快于.py文件。至于为什么要有.pyc文件,这个需求太明显了,因为py文件是可以直接看到源码的,如果

你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。

再接下来介绍的是.pyw文件。很多使用过.pyc文件的同学都知道,.pyc文件执行的时候桌面会出现黑糊糊的窗口,有的时候这是十分难

看的。于是.pyw文件就应运而生了。.pyw文件与.pyc文件本质上没有什么区别,只是.pyw执行的时候不会出现黑窗口。.pyw
格式主要

是被设计来运行开发完成的纯图形界面程序的。
纯图形界面程序的用户不需要看到控制台窗口。值得一提的是,开发纯图形界面程序

的时候,你可以暂时把 .pyw 改成 .py ,
以便运行时能调出控制台窗口,看到所有错误信息,方便进行修改。

接下来介绍的是.pyo文件。pyo是优化编译后的程序。 python -O
源文件即可将源程序编译为pyo文件。同样.pyo文件也是不能用文

本编辑器编辑的。

最后介绍的是.pyd文件。.pyd文件并不是使用python编写而成,.pyd文件一般是其他语言编写的python扩展模块。(之前又在网上看到

过有关解释,.pyd文件是用D语言按照一定的格式编写,并处理成二进制文件。那么什么是D语言呢??它是c/c++的综合进化版,不仅

具有二者的全部优点,而且整体性能更佳,但是其抽象程度高。)

扩展模块,一般用C或C++编写,其实可以说是一种更优秀的D语言编写的。

性能数据的头部是一个PERF_DATA_BLOCK结构(如图1所示),它描述系统和性能数据总体信息,可从Global键值处查询得到该结构数据。PERF_DATA_BLOCK之后,定义了系统中的全部性能对象类型(PERF_OBJECT_TYPE),其中每个对象类型头部中描述了下一个性能对象类型的偏移量Offset。

我看最新的pyserial代码发现看不懂~Σ( ° △
°|||)︴,尝试用跑跑看一看效果,debug跟一跟流程的方式来熟悉理解,发现·····特么~转太多弯啦~根本就hold不过来啊!脑容量跟基本功都不够啊!于是想着怎么从侧面来攻破这个堡垒…………

性能日志和警报是作为 Windows
操作系统的一部分发行的一种管理性能监控工具。它依靠由各种 Windows
组件、子系统和应用程序发布的性能计数器,使您可以跟踪资源使用情况以及针对时间以图形方式绘制它们。您可以使用
Performance Logs and Alerts
来监控标准的性能计数器(例如,内存使用情况或处理器使用情况),或者您可以定义您自己的自定义计数器来监控应用程序特定的活动。

云顶娱乐平台 17

图3

云顶娱乐平台 18

Requests/Min

相关文章