利用Windows效能計數器(PerformanceCounter)監控

來源:互聯網
上載者:User

一、概述

效能監控,是Windows NT提供的一種系統功能。Windows NT一直以來總是整合了效能監控工具,它提供有關作業系統當前健全狀態的資訊,針對各種對象提供了數百個效能計數器。效能物件,就是被監視的對象,典型例子有Processor、Process、Memory、TCP/UDP/IP/ICMP、PhysicalDisk等。計數器通常提供作業系統、應用程式、服務、驅動程式等的效能相關資訊,以此來分析系統瓶頸和對系統及應用程式效能進行診斷和調優。效能計數器機制讓應用程式和作業系統組件可以向效能監控應用程式,比如效能監控器(Performance Monitor),報告一些與效能有關的統計資訊。PerfMon.exe中可以查看效能物件、效能計數器和對象執行個體,可通過添加計數器來查看相關描述資訊。

實際上,可以通過編寫程式來訪問所有的Windows效能計數器。Windows中,註冊表是訪問效能計數器的一種機制。效能資訊並不實際存在於註冊表中,在登錄編輯程式RegEdit.exe中是無法查看的,但可以通過註冊表函數來訪問,利用註冊表鍵來獲得從效能資料提供者那裡提供的資料。開啟名為HKEY_PERFORMANCE_DATA的特殊鍵,利用RegQueryValueEx函數查詢鍵下面的值,就可以直接存取註冊表效能計數器資訊。當然,也可以利用效能資料協助器(PDH, Performance Data Helper) API (Pdh.dll)來訪問效能計數器資訊。

效能記錄檔及警示是作為 Windows 作業系統的一部分發行的一種管理效能監控工具。它依靠由各種 Windows 組件、子系統和應用程式發布的效能計數器,使您可以跟蹤資源使用方式以及針對時間以圖形方式繪製它們。您可以使用 Performance Logs and Alerts 來監控標準的效能計數器(例如,記憶體使用量情況或處理器使用方式),或者您可以定義您自己的自訂計數器來監控應用程式特定的活動。

二、HKEY_PERFORMANCE_DATA資料群組織

效能資料的頭部是一個PERF_DATA_BLOCK結構(1所示),它描述系統和效能資料總體資訊,可從Global索引值處查詢得到該結構資料。PERF_DATA_BLOCK之後,定義了系統中的全部效能物件類型(PERF_OBJECT_TYPE),其中每個物件類型頭部中描述了下一個效能物件類型的位移量Offset。

圖1 圖2

效能物件有兩種:一種是單一實例對象,另一種是多執行個體對象。圖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結構體組成。後面是計數器值資料,與單一實例對象相同。

圖3

三、效能計數器的架構

效能計數器採用的是用戶端伺服器結構,效能資料採用共用記憶體儲存,在應用中自訂效能計數器,在應用程式調用的時候調用效能計數器進行計數。體繫結構如下:

效能計數器可以獲得應用程式效能的即時度量資料,而不需要通過記日誌,進行另外的處理。而且效能計數器可以遠程查看,可以通過管理工具(MOM)進行管理。在損耗上也非常的小。

四、.NET效能計數器實現

在.NET Framework下有個程式集

(C:WINDOWSMicrosoft.NETFrameworkv2.0.50727perfcounter.dll)實現了效能計數器功能,包括效能計數器的安裝/卸載,值的讀寫。

在命名空間System.Diagnostic提供了一組效能計數器類,包括PerformanceCounterCategory,PerformanceCounter,PerformanceCounterInstaller,CouterSample等等。

在.NET中效能計數器有良好的抽象封裝,實現起來比C/C++容易得多。我們在應用經常只關注一些請求類型的資料度量,例如下述:

Requests Started

Requests Executing

Requests Completed

Requests Failed

Request Execution Time

Requests/Hour

Requests/5Min

Requests/Min

Requests/Sec

但是真正需要做這些效能計數器的安裝/卸載,計數,讀取還是需要大量的代碼,通過封裝來簡化編程介面。對於使用WCF來實現的服務,可以基於WCF的擴充性,進行進一步的封裝。

 

.Net最佳實務3:使用效能計數器收集效能資料

http://blogs.msdn.com/b/ralarcon/archive/2012/10/03/web-app-performance-counters-compilation.aspx

Monitor your SQL Server

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.