效能監視計數器封裝元件PDHWrapper說明 (轉)
:namespace prefix = o ns = "urn:schemas--com::office" />
監視計數器封裝PDHWrapper說明
版本
建立時間
建立人
備註
1.0.0112.2
2002-7-12
zhengyun_ustc
第一稿
引言:
編寫目的:
本文件將說明效能監視封裝元件PDHWrapper的作用、介面定義,以及示例。
名詞和縮寫定義:
1. PDH: Performance Data Helper
2.
概述:
Microsoft WindwNT/2000 提供了一個強大的集來訪問事件和效能資料的眾多計數器。我們既可以實時地得到計數器的值,也可以從一個日誌中讀取計數器資料。
Microsoft提供的是Performance Monitoring Functions。一個最基本的使用PDH蒐集效能資料的步驟是:
u 建立一個查詢;
u 把感興趣的計數器新增到查詢中;
u 蒐集效能資料;
u 得到計數器的數值;
u 關閉查詢。
我把這些細節操作進行封裝,這就是PDHWrapper元件的IPDH介面。對於者來說,只需要呼叫一個屬性就可以完成一切,使用起來極其簡單。
呼叫示範:
longCounterValue = oPDH.counter("Process(_Total)Handle Count")
這個PDHWrapper元件需要Microsoft的PDH.DLL,這個元件一般說來在系統中是沒有的。只有了Microsoft PlatfoSDK,才會在WinntSystem32目錄找到它。
我的機器上的這個PDH.DLL的版本號是5.00.2195.2739,全稱是 Performance Data Helper DLL,是151KB。
經常會用到的計數器,分成下面幾類:
1:效能:
"Memory:Avaiable Bytes"計數器以便較精確地估計記憶體的使用情況。這個計數器表示當前的可用記憶體。
"Memory:Page Faults/sec"和"Memory:Page Reads/sec"計數器測量記憶體效能。當程式所引用的虛擬記憶體頁不在記憶體中時,將發生頁錯誤,"Memory:Page Faults/sec"表示頁錯誤的個數。如果某頁已在主記憶體中,或者它正被共享此頁的其他程式使用,那麼就不會從調入該頁。"Page Reads/sec"是讀取磁碟,以提取解決頁錯誤所需頁的次數。從總體上講,這兩個計數器反映了訪問磁碟的頻率,其值越低,說明響應時間越短。
2:IIS
"Inte Information Server Global:Cache Hits%"計數器,它也被稱為“快取記憶體命中率”,是快取記憶體命中數和所有快取記憶體請求的比率。
"Internet Information Server Global:Cache flushes",它是快取資料的有效期,以秒為單位,超過這個時間,則快取資料過期。如果有效期太短,從快取中清除資料的頻率太高,則不能滿足實際要求;如果有效期太長,無用資料不能及時從記憶體中清除,則會產生記憶體的浪費。
3:效能:
"NConnection:Bytes Total/sec"是指本地傳送和接收資料的速度。為了檢視網路連線是否成為瓶頸,將這個計數器的資料速度與總頻寬進行比較。
“ Service:Maximum Connections(最大連線數)”、“Web Service:Total Connection Attempts(連線嘗試總數)”和“Web Service:Connection Refused(被拒絕的連線數)”,來決定Web服務是否使用了足夠多的連線。
4:效能:
System:% Total Processor Time :是計算機上所有處理器進行有用工作所花費時間的比例。
Processor:% Processor Time :是處理器用於處理有效工作的時間比。
Process:% Processor Time :是某程式的所有執行緒使用處理器來執行命令所花費時間的百分比。
NBT Connection:Bytes Total/sec:是本地計算機傳送和接收資料的速度。
System:Processor Queue Length :是處理器佇列的瞬間長度,以執行緒為單位。
Processor:Interrupts/sec :是處理器所遇到的裝置中斷次數。
Processor:%DPC Time:是處理器花費在延遲的過程呼叫(Deferred Procedure Call)上的時間百分比。
執行環境規定:
Microsoft Server。
IPDH Reference:
IPDH Interface Reference:
Remarks:
counter property:
這個屬性使用起來很簡單。就像ADO的Recordset一樣,支援這樣的語法:recordset(“SomeFieldName”),得到的就是這個資料集的欄位的值。我們這裡也是,不用關心是否建立了查詢,是否新增了計數器,只要傳遞的計數器的名字是正確的,就可以得到實時的數值。
explain property:
使用辦法同上。只要傳遞計數器的名字,返回值就是計數器的解釋性文字。不過這不一定能得到。
count property:
這是當前查詢中的計數器的總數目。
Requirements:
Supported platforms include Microsoft Windows® 2000.
Implementation: PDHWrapper.dll, PDHWrapper.lib.
輸入項[C/C++]
Header and IDL files: PDHWrapper.h, PDHWrapper.idl
Version-InDependent ProgID: PDHWrapper.PDH
Version-InDependent CLSID: { 76CB53AF-BD5E-4BC0-892E-E5AAFA4E2046 }
IPDH Members
Properties:
Property Name
Property Description
counter
輸入的引數是計數器的名字;
首先察看是否已經訂閱了這個計數器,如果沒有,就新增它;
然後蒐集效能資料;
最後把這個計數器的數值返回
count
訂閱的計數器的數目
explain
計數器的說明文字
counter property (PDH/IPDH)
我們內建了一個std::map,它來計數器的名字和控制程式碼。當呼叫counter屬性查詢計數器時,我們首先查詢map中是否有這號人物。如果沒有的話,就呼叫PdhAddCounter方法告訴本次查詢我們要訂閱這個計數器了。
接著,呼叫PdhCollectQueryData方法計數器中的資料。
之後,我們呼叫PdhGetFormattedCounterValue來得到這個計數器數值的LONG型別值。
至於,開啟和關閉本次Query, 都是放在構造和解構函式中做的,不用使用者勞神了。
Usage:
[Script]
Script Syntax
longCounterValue = oPDH.counter(strCounterName)
Parameters
strCounterName
Pointer to the fully-qualified and resolved path of the counter to create. This path can contain wildcard characters.
Example
Dim oPDH
Set oPDH = Server.Create("PDHWrapper.PDH")
Dim strCounterName
Dim longCounterValue
StrCounterName = “Process(_Total)Handle Count” ‘ 控制程式碼數目
longCounterValue = oPDH.counter(strCounterName) ‘ 計數器的數值
set oPDH = nothing
%>
[]
Visual Basic Syntax
bResult = oSMReceive.ReceiveXML(strMSgContent)
Parameters
strCounterName
Pointer to the fully-qualified and resolved path of the counter to create. This path can contain wildcard characters.
Example
Dim oPDH As New PDHWrapper.PDH
longCounterValue = oPDH.counter(“Process(_Total)Handle Count”)
[C/C++]
C/C++ Syntax
HRESULT CPDH::get_counter(VARIANT* Key, VARIANT* pRetItem);
Parameters
Key[in]:
計數器的名字
pRetItem[out,retval]:
計數器的數值
C/C++ Return Values
S_OK
Remarks:
如果輸入引數不正確,則返回的VARIANT變數為VT_EMPTY。
由於計數器太多的話,對系統效能有很大的影響,所以我們設定了一個限制。最多隻能新增50個計數器,如果超過的話,返回的VARIANT變數也為VT_EMPTY。
count property (PDH/IPDH)
這裡返回的是我們內建的std::map物件的size()。
Usage:
[Script]
Script Syntax
nCounterNumber = oPDH.count()
Example
Dim oPDH
Set oPDH = Server.CreateObject("PDHWrapper.PDH")
Dim nCounterNumber
nCounterNumber = oPDH.count ‘ 計數器的總數目
set oPDH = nothing
%>
[Visual Basic]
Visual Basic Syntax
nCounterNumber = oPDH.count()
Example
Dim oPDH As New PDHWrapper.PDH
nCounterNumber = oPDH.count
[C/C++]
C/C++ Syntax
HRESULT CPDH::get_count(long* pCount);
Parameters
pCount[out,retval]:
計數器的總數目
C/C++ Return Values
S_OK
explain property (PDH/IPDH)
使用者可以自由察看任何一個計數器的說明。如果我們在std::map物件中沒有找到本計數器,就新增一個,但是獲得計數器的說明之後 ,就把這個計數器刪除。如果在此之前已經訂閱了本計數器,則不刪除它。
Usage:
[Script]
Script Syntax
szExplainText = oPDH.explain(strCounterName)
Parameters
strCounterName
Pointer to the fully-qualified and resolved path of the counter to create. This path can contain wildcard characters.
Example
Dim oPDH
Set oPDH = Server.CreateObject("PDHWrapper.PDH")
Dim strCounterName
Dim strExplainText
StrCounterName = “Process(_Total)Handle Count” ‘ 控制程式碼數目
strExplainText = oPDH.explain(strCounterName) ‘ 計數器的解釋
set oPDH = nothing
%>
[Visual Basic]
Visual Basic Syntax
szExplainText = oPDH.explain(strCounterName)
Parameters
strCounterName
Pointer to the fully-qualified and resolved path of the counter to create. This path can contain wildcard characters.
Example
Dim oPDH As New PDHWrapper.PDH
strExplainText = oPDH.explain(“zhengyunProcess(_Total)Handle Count”)
[C/C++]
C/C++ Syntax
HRESULT CPDH::get_explain(VARIANT* Key, VARIANT* pRetItem);
Parameters
Key[in]:
計數器的名字
pRetItem[out,retval]:
計數器的說明
C/C++ Return Values
S_OK
Remarks:
如果輸入引數不正確,則返回的VARIANT變數為VT_EMPTY。
如果引數是一個代表計數器名字的BSTR,則
第一步,呼叫PdhAddCounter來新增計數器;
第二步,PdhGetCounterInfo得到這個計數器的PDH_COUNTER_INFO結構;
第三步,得到計數器的PDH_COUNTER_INFO結構的szExplainText。
必要時,呼叫PdhRemoveCounter方法將這個計數器從查詢中刪除。
Using IPDH Interface:
下面的例子將給出查詢效能指標的全部流程。
Example:
Dim obj
Set obj = Server.CreateObject("PDHWrapper.PDH")
Repsonse.Write obj.counter("Process(_Total)Handle Count")
Repsonse.Write obj.counter("Process(_Total)Handle Count")
Repsonse.Write obj.counter("server.tomosoft.comProcess(_Total)Handle Count")
Repsonse.Write obj.counter("zhengyunProcess(_Total)Thread Count")
Repsonse.Write obj.explain("Process(_Total)Handle Count")
Repsonse.Write obj.count
%>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991684/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (轉)Windows 效能監視器工具-perfmonWindows
- React周檢視元件封裝React元件封裝
- Windows效能計數器監控實踐Windows
- pureftpd安裝配置簡明說明 (轉)FTP
- 效能監視器- Performance MonitorORM
- SQL SERVER 效能監視器SQLServer
- 反NP監視原理並有例項說明
- 事件檢視器事件ID部分說明事件
- Splunk實戰(一)——索引器配置以及轉發器安裝配置說明索引
- 給電腦裝個監視器--VB程式設計一例 (轉)程式設計
- ORACLE 7.3.4 for SCO Unix 安裝說明(轉)Oracle
- WebBrowser 控制元件-說明Web控制元件
- shell簡介之bash程式設計之引數說明(轉)程式設計
- statspack 安裝以及相關引數說明
- oracle安裝記憶體引數說明Oracle記憶體
- 使用元件封裝資料庫操作(二) (轉)元件封裝資料庫
- 使用元件封裝資料庫操作(一) (轉)元件封裝資料庫
- 轉換說明
- [Nginx] - nginx 基本配置與引數說明(轉)Nginx
- 列表元件抽象(2):listViewBase說明元件抽象View
- SpringCloud各個元件說明SpringGCCloud元件
- vue元件封裝指南Vue元件封裝
- 封裝UI元件庫封裝UI元件
- TOP引數說明
- mysqldump引數說明MySql
- mysql 變數說明MySql變數
- mysqldump 引數說明MySql
- MySQL引數說明MySql
- 效能分析命令輸出說明
- ORACLE安裝引數sysctl.conf說明Oracle
- MySQL 5.5編譯安裝cmake引數說明MySql編譯
- tesseract安裝說明
- 自動部署SQLTrace和Windows效能監視器SQLWindows
- web伺服器效能評估和監視Web伺服器
- Prometheus和node exporter的安裝與監控資料說明PrometheusExport
- 安卓開發之封裝顯示倒數計時按鈕控制元件安卓封裝控制元件
- MyDAL – 元件適用範圍說明元件
- 面向設計的半封裝web元件開發封裝Web元件