1、windows自帶系統資源監控工具 2、Windows監控的數據來源:Performance Counters 2.1 Performance Counter架構 2.2 Performance Counter數據結構 2.3 消費Performance Counter數據 3、使用基於PDH的 ...
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()