Windows系統資源監控

 

 

一、Windows自帶系統資源監控工具

咱們都知道,Windows自帶有系統資源監視器。主要有3個地方:php

1) Windows的任務管理器的性能頁籤,包括了CPU,內存,磁盤,網絡等系統資源的監控。它主要監控系統資源的整體使用狀況,使用它,咱們能夠發現是否有資源達到瓶頸了等等。html

 

 

2) Windows資源監視器python

這個工具能夠看出系統資源究竟是由哪些進程消耗的。經過它,能夠快速查看到到底哪些進程佔用了你的系統資源。windows

 

3) 性能監視器網絡

前兩種工具已經提供你要監控的大部分功能,在某些狀況下,可能仍然不能定位問題,這時候就須要你更進一步的瞭解系統的運行情況。那麼這個工具就是一個不錯的選擇。數據結構

 

 

二、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++

 

三、使用基於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()
相關文章
相關標籤/搜索