Windows效能計數器監控實踐

2022-02-02 08:42:54 字數 2591 閱讀 8474

windows效能計數器(performance counter)是windows提供的一種系統功能,它能實時採集、分析系統內的應用程式、服務、驅動程式等的效能資料,以此來分析系統的瓶頸、監控元件的表現,最終幫助使用者對系統進行合理調優。市面上採集windows效能計數器指標的產品參差不齊,尤其在處理某類應用程式有多個程序例項時,採集的資料更是差強人意。所幸微軟為碼農精心準備了獲得效能計數器指標的介面,用於靈活獲得相關效能計數器指標值,但程序級別windows效能計數器指標的採集監控,並沒有想象的那麼美好。因此本文結合筆者應用實踐,**程序級別windows效能計數器指標統一採集監控方案,以及在應用實踐中遇到的坑,作為避坑指南,供感興趣的同行參考。

程序級別windows效能計數器指標作為特來電監控平台的一部分,對深入掌握系統程序級別執行狀態,定位系統存在的問題,以便更快、更準的發現潛在的線上問題,起到了舉足輕重的作用。

針對windows效能計數器的監控,統一的採集監控方案如下所示:

效能計數器指標統一採集監控方案

本文重點關注指標管理與指標採集,對指標儲存及指標展現只做概要闡述。

一、        指標管理

windows效能計數器指標類別比較多,因此我們需要對關注的指標進行分類管理。針對程序級別監控,我們主要關注clr以及程序相關類別指標:.net clr memory、.net clr exception、.net clr jit、.net clr loading、process等。

乙個windows效能計數器主要由3個屬性來標識:指標類別(category name)、指標名稱(counter name)、指標例項(instance name)。為了能對某類應用程式的多個程序例項進行統一採集,我們不對指標例項進行管理,而對指標例項對應的程序名稱進行管理,同時支援乙個效能計數器指標關聯多個程序名稱,並且在執行時動態計算出每個程序名稱對應的多個程序例項,從而大幅降低指標管理的工作量。

二、        指標採集

指標採集主要解決採集外掛程式執行時的空間(採集範圍)與時間(採集頻率)問題。並不是所有機器都部署了我們關注的應用程式,因此需要通過採集範圍,確定需要對哪些機器上的效能計數器指標進行採集,同時需要確定採集頻率,比如10秒、1分鐘、5分鐘等。

雖然微軟提供了效能計數器介面用於採集對應的指標值,但當乙個應用程式有多個程序例項時(比如乙個機器上部署了多個iis站點,程序名稱都是w3wp,在效能計數器中的例項名稱是w3wp、w3wp#1、…、w3wp#n),進行指標採集的坑會比較多,這裡介紹幾個比較典型的問題。

由於效能計數器預設不顯示程序id,所以無法直接建立程序例項和效能計數器指標例項的關聯關係,相同的效能計數器指標例項名稱,可能屬於乙個或多個不同的程序例項。

程序例項與效能計數器例項關聯關係

比如在.net clr memory和process中例項名稱同為w3wp#1的效能計數器,可能對應同乙個程序例項,也可能對應不同的程序例項,這是最詭異的坑!市面上一些監控產品無法準確採集同一應用程式對應多個程序例項的效能計數器指標值,可能與此有關。

為了能建立程序例項與效能計數器例項的關聯關係,需要在顯示效能計數器例項時帶上程序id。

方案一:修改登錄檔。但潛在的坑也很明顯:只適用於.net clr memory以及process類別的效能計數器,同時可能會導致第三方監控工具失效,並且修改生產環境的登錄檔風險不可控,不是首選方案。

environment.setenvironmentvariable("complus_processnameformat", "1");

該方案是程序級別的,設定後得到的效能計數器例項會自動帶上程序id,並且不會影響到全域性設定或者其它應用程式,是推薦方案。

採集程序級別指標時,有時需要根據iis站點程序id獲得對應的應用程式池以及物理路徑:

通過程序id獲得應用程式池以及物理路徑

方案一:呼叫wmi(windows management instrumentation)介面獲得應用程式池。

select * from win32_process where processid=pid

該方案存在的坑:頻繁呼叫會導致機器cpu飆公升,不是首選方案。

該方案通過命令獲得結果後,只需要進行字串解析,即可獲得程序id與應用程式池的關聯關係,是推薦方案。

三、        指標儲存

指標儲存在時序資料庫中,每個效能計數器類別(category name)+效能計數器名稱(counter name)對應乙個指標表,表中按程序名稱進行分類,每一行表示乙個程序例項對應效能計數器例項的指標值。

四、        指標展現

指標展現可以按程序名稱、程序例項、機器等維度進行分類聚合展現,相比登入到每個機器設定效能計數器,指標集中展現大幅提公升了工作效率。

五、        總結

本文**了windows效能計數器監控實踐,主要涉及指標管理、指標採集、指標儲存、指標展現四個方面,同時介紹了同一應用程式對應多個程序例項時,指標採集中遇到的坑。

如何修復windows的效能計數器

lodctr 註冊服務或裝置驅動程式的新效能計數器名稱和解釋文字,同時儲存並恢復計數器設定和解釋文字。語法lodctr computername filename s filename r filename 引數 computername filename 註冊初始化檔案 filename 中的效能...

效能計數器之CPU

processor processor time 閥值 處理器的閥值一般設為85 含義 這個計數器是處理器活動的主要指標。高數值並不一定是壞事,但是如果其他處理器相關的計數器 比如 privileged time 或者processor queue length 線性增加的話,高cpu使用率就值得調...

計數器 智慧型計數器簡介

計數器主要是應用於電子科技領域,計數器是一種運用得比較多的時序邏輯電路。計數器可以對數字進行運算,它是一種沒有辦法顯示計算結果的顯示器。隨著電子科技的不斷發展,現在的計數器也實現了智慧型功能。智慧型計數器的出現幫助我們實現了很多高強度生產問題 複雜的技術問題,並且節約了生產成本和人力成本。智慧型計數...