【效能工具】Windows效能監控工具Perfmon使用指南
1 Perfmon簡介
Perfmon(Performance Monitor)是一款Windows自帶的效能監控工具,提供了圖表化的系統性能實時監視器、效能日誌和警報管理。通過新增效能計數器(Performance Counter)可以實現對CPU、記憶體、網路、磁碟、程序等多類物件的上百個指標的監控。其中,效能日誌可定義輸出格式為二進位制檔案、文字檔案、SQLSERVER記錄等,以方便後續使用第三方工具進行分析。
2 Perfmon使用
Perfmon支援選擇性的監控感興趣的效能計數器,指標範圍廣、粒度細,而且支援將監控資料持久化。當然,如果只是關注效能主要指標(cpu、mem、io、net),也可以直接檢視資源管理器(Resmon.exe)。本文主要介紹使用Perfmon進行效能監控的通用方法,更細節的內容請參考其他文件,如,微軟官方文件或Perfmon幫助文件:
2.1 Perfmon使用方法
Perfmon是windows自帶工具,無需安裝,鍵入命令即可開啟工具,具體步驟如下:
1. 開始-->搜尋程式和檔案,輸入perfmon,回車後即可開啟工具;
2. 雙擊左側導航欄的【效能監視器】,然後在右窗格中單擊滑鼠右鍵或
3. 在”效能物件”列表,選擇需要監控的計數器,新增後即可進行實時監控,如圖所示是選擇監控cpu的計數器:
監控計數器新增完成後,可以檢視到圖形實時變化,如上圖,計數器%Processor Time表示cpu的利用率,從圖中可以看到最新值、平均值、最小和最大值,以及監控持續時間,其中,這裡的持續時間是指當前配置顯示在圖表中的時間跨度,並不是已經監控的時間,該配置可以右鍵點選圖示->屬性->常規->持續時間中配置。另外,監控圖上右鍵點選,可以對計算器進行操作,如新增、刪除、隱藏、儲存、更改屬性等操作。
2.2 Perfmon監控物件和指標
通過上節描述,已經可以使用Perfmon進行實時監控了,可能仍然會對描述中的效能物件和效能計數器感到疑惑。通俗的講,效能物件就是你要直接監控的資源物件,如cpu,mem等,而衡量這些物件的效能需要一些指標,就是效能計數器。Perfmon支援監控多種效能物件,每個物件又提供了比較全面的效能計數器。效能物件、常用效能物件及計數器,如下表所示:
表1 效能物件描述
效能物件 |
提供的資訊 |
Browser |
Browser performance object 由衡量通知、列舉和其他瀏覽器傳輸率的計數器組成 |
Cache |
Cache performance object 包括監督檔案系統快取(實體記憶體上儘可能長時間的儲存最近使用過的資料以便訪問該資料時不需再從磁碟上讀取的那一部分記憶體。)的計數器。因為應用程式只使 用快取,因此該快取可作為應用程式 I/O 操作的指示器。當有足夠記憶體時,快取可增大,但當記憶體不足時,快取會變得太小而無法使用。 |
Distributed Transaction Coordinator |
Microsoft Distributed Transaction Coordinator 效能計數器 |
ICMP |
ICMP performance object 包括衡量用 ICMP 協議傳送和接收訊息的速度的計數器。它還包括監督 ICMP 協議錯誤的計數器。 |
IP |
IP performance object 包括衡量使用 IP 協議傳送和接收的 IP 資料報速度的計數器。它還包含監督 IP 協議錯誤計數器。 |
Job object |
由每個活動命名的作業物件收集的帳戶和處理器使用資料的報告。 |
Job object Detail |
Job object Detail 顯示有關作業物件中的活動處理的詳細的操作資訊。 |
Logical Disk |
Logical Disk performance object 包含監視一個硬碟或固定磁碟驅動器的邏輯分割槽的計數器。Performance Monitor 用邏輯磁碟的驅動器號(如: C)來識別邏輯磁碟。 |
Memory |
Memory performance object 由描述計算機上的物理和虛擬記憶體行為的計數器組成。實體記憶體指計算機上的隨機存取儲存器的數量。虛擬記憶體由實體記憶體和磁碟上的空間組成。許多記憶體計數器監 視頁面排程(指磁碟與實體記憶體之的程式碼和資料頁的移動)。過多的頁面排程(記憶體不足的一種表現)可引起拖延,會影響整個系統處理效率。 |
NBT Connection |
NBT Connection performance object 包括衡量用 NBT 連線在一臺本地計算機和一臺遠端計算機之間傳送和接收位元組的速率的計數器。該連線用遠端計算機的名稱來識別。 |
Network Interface |
Network Interface performance object 包括衡量通過一個 TCP/IP 網路連線傳送和接收位元組和資料包的速率的計數器。它包括監督連線錯誤的計數器。 |
Objects |
Object performance object 包含在系統中監督邏輯物件的計數器,如:處理、執行緒、多使用者終端執行程式和訊號量。這個資訊可以用於檢測計算機資源的不必要的消耗。每個物件需要記憶體以儲存有關物件的基本資訊。 |
Paging File |
Paging File performance object 包括監督在計算機上的分頁檔案的計數器。分頁檔案指為備份計算機上已用實體記憶體而保留的磁碟空間。 |
Physical Disk |
Physical Disk performance object 包含監視計算機上的硬碟或固定磁碟驅動器的計數器。磁碟用於儲存檔案、程式及分頁資料並且通過讀取檢索這些專案並通過記錄寫入對其進行更改。物理磁碟計數器的值為邏輯磁碟(由磁碟分成)值的總和。 |
Print Queue |
顯示一個列印列隊的操作統計。 |
Process |
Process performance object 包含監視執行中應用程式和系統處理的計數器。所有在一個處理中的執行緒均共享同一個地址空間並可以訪問同樣的資料。 |
Processor |
Processor performance object 包含衡量處理器活動方面的計數器。處理器是計算機進行算數和邏輯計算、在附屬件起始操作及執行處理執行緒的部分。一臺計算機可以有多臺處理器。處理器物件將每臺處理器作為物件的範例。 |
Processor performance |
處理器資訊 |
PSched Pipe |
資料包計劃程式中的管道統計數 |
RAS Port |
RAS Port performance object 包括監督計算機上的 RAS 裝置的每個遠端訪問服務埠的計數器。 |
RAS Total |
RAS Total performance object 包含將計算機上的遠端訪問服務(RAS)裝置的所有埠的值相加的計數器。 |
Redirector |
Redirector performance object 包括在本地計算機上監督網路連線的計數器。 |
RSVP |
RSVP 服務效能計數器。 |
System |
System performance object 包含應用於計算機上不止一個元件處理器範例的計數器。 |
TCP |
TCP performance object 包含衡量使用 TCP 協議傳送和接收 TCP Segment 速率的計數器變數。它包含監督在每個 TCP 連線狀態下的 TCP 連線數目的計數器變數。 |
Telephony |
電話服務系統 |
Terminal Services |
終端服務資訊。 |
Terminal Services Session |
每次終端服務會話資源監督。 |
Thread |
Thread performance object 包括衡量執行緒行為方面的計數器。一個執行緒是在一臺處理器上執行指令的基本物件。所有執行的處理至少有一個執行緒。 |
UDP |
UDP performance object 包含衡量使用 UDP 協議傳送和接收 UDP 資料報的速率的計數器。它包括監督 UDP 協議錯誤的計數器。 |
WMI Objects |
WMI 介面卡返回的 WMI 高效能提供程式 |
上表中的效能物件有多達數百個效能指標,如果安裝有.NET框架,還會看到更多的.NET開頭的物件。我們關注系統或應用的效能時,不可能、也不必要關注這麼多指標,只需根據實際情況選取必要指標即可。一般而言,對於Windows系統或執行其上的應用來說,CPU、 Memory、Disk、Network等關鍵物件是必不可少的。
表2 常用效能物件和計數器
效能物件 |
計數器 |
提供的資訊 |
Processor |
% Idle Time |
% Idle Time 是處理器在取樣期間空閒的時間的百分比 |
Processor |
% Processor Time |
% Processor Time 指處理器用來執行非閒置執行緒時間的百分比。計算方法是,測量範例間隔內非閒置執行緒活動的時間,用範例間隔減去該值。這個計數器是處理器活動的主要說明器,顯示在範例間隔時所觀察的繁忙時間平均百分比。 |
Processor |
% User Time |
% User Time 指處理器處於使用者模式的時間百分比。使用者模式是為應用程式、環境分系統和整數分系統設計的有限處理模式。 |
Memory |
Available Bytes |
Available Bytes顯示出當前空閒的實體記憶體總量。當這個數值變小時,Windows開始頻繁地呼叫磁碟頁面檔案。如果這個數值很小,例如小於5 MB,系統會將大部分時間消耗在操作頁面檔案上。 |
Memory |
% Committed Bytes in Use |
% Committed Bytes In Use 是 Memory: Committed Bytes 與Memory: Commit Limit之間的比值。(Committed memory指如果需要寫入磁碟時已在分頁檔案中保留空間的處於使用中的實體記憶體。Commit Limit是由分頁檔案的大小而決定的。如果擴大了分頁檔案,該比例就會減小)。這個計數器只顯示當前百分比;而不是一個平均值。 |
Memory |
Page Faults/sec |
Page Faults/sec是指處理器處理錯誤頁的綜合速率。用錯誤頁數/秒來計算。當處理器請求一個不在其工作集(在實體記憶體中的空間)內的程式碼或資料時出現 的頁錯誤。這個計數器包括硬錯誤(那些需要磁碟訪問的)和軟錯誤(在實體記憶體的其它地方找到的錯誤頁)。許多處理器可以在有大量軟錯誤的情況下繼續操作。 但是,硬錯誤可以導致明顯的拖延。這個計數器顯示用上兩個例項中觀察到的值之間的差除以例項間隔的持續時間所得的值。 |
Network Interface |
Bytes Total/sec |
Bytes Total/sec是傳送和接收位元組的速率,包括幀字元在內。 |
Network Interface |
Packets/sec |
Packets/sec為傳送和接收資料包的速率。 |
Physical Disk |
% Busy Time |
% Busy Time指磁碟驅動器忙於為讀或寫入請求提供服務所用的時間的百分比。 |
Physical Disk |
Avg. Disk Queue Length |
Avg. Disk Queue Length 是指磁碟佇列的平均長度。磁碟完成對讀取和寫入請求的處理時間,是磁碟資料吞吐量的外在表現。 |
Physical Disk |
Current Disk Queue Length |
Current Disk Queue Length指在收集操作資料時在磁碟上未完成的請求的數目。它包括在快照記憶體時正在為其提供服務中的請求。這是一個即時長度而非一定間隔時間的平均值。 多主軸磁碟裝置可以一次有多個請求操作,但是其它同時發生的請求為等候服務。這個計數器可能會反映一個暫時的高或低的列隊長度,但是如果在磁碟驅動器存在 持續負載,可能值會總是很高。請求等待時間與這個列隊的長度減去磁碟上的主軸成正比。這個差值應小於2才能保持良好的效能。 |
2.3 使用計數器日誌
在2.1節中介紹了Perfmon效能監視器的使用方法,該功能主要用於對指定的效能指標進行實時監控(類似nmon的互動模式),但它不能把監控的資料儲存下來。如果需要持續對系統的指定效能指標進行監控,就需要使用Perfmon的計數器日誌功能(類比nmon的後臺監控模式),計數器日誌可以把監控資料以指定的方式進行儲存,同時也方便後續用第三方工具進行分析。
接下來,以監控CPU\MEM為例介紹Perfmon計數器日誌的使用方法。
1. 在Perfmon右側導航窗格中,展開“資料收集器集”,右鍵單擊“使用者定義”,指向“新建”,然後單擊“資料收集器集”,將啟動“建立新資料收集器集”嚮導;
2. 填入收集器名稱,選擇”手動建立(高階)”,點選下一步進入選擇資料型別嚮導,如圖:
3. 選擇“效能計數器”,點選下一步,進入效能計數器選擇介面,通過點選”新增”按鈕新增CPU\MEM的效能計數器,同時,可以根據採集時長自定義取樣間隔,預設是15s,如圖:
4. 如果需要自定義日誌的儲存位置,可以點選”下一步”,否則可以直接點選“完成”,結束配置。
5. 另外,可以右鍵單擊採集器集名稱,選擇屬性,配置監控任務的啟停條件,如,配置定時任務或退出條件等,如圖為配置採集30s後停止:
6. 如需對監控的效能指標、日誌格式、取樣時間等進行調整,可以右鍵單擊資料收集任務,選擇屬性,編輯即可,可以增刪計數器、修改日誌格式(預設二進位制的.blg)、修改取樣間隔等,如圖:
7. 最後,點選工具欄啟動資料收集器即可;
8. 結果收集完成後,可以在右側導航欄選擇”報告”,展開“使用者自定義”,檢視報告;也可以通過“效能監視器”的“檢視日誌資料”選擇要載入顯示的日誌檔案。
3 Perfmon效能分析方法
本節主要介紹使用Perfmon對CPU、MEM、磁碟I\O、NET進行監控和效能分析的通用思路和方法。
1. CPU分析方法
根據2.2節的介紹,CPU監控涉及的主要效能計數器是% Processor Time、% User Time、System:Processor Queue Length。其中,% Processor Time效能計數器的數值展示了伺服器CPU的使用情況,如果該值持續超過90%,則說明整個系統面臨著CPU瓶頸,需要通過增加CPU來提高效能;%User Time效能計數器的數值展示了使用者空間程序的CPU利用率,如果該值較大,需要分析是哪個使用者程序、執行的何種操作引起了CPU升高; System:Processor Queue Length計數器的數值展示了CPU等待處理的佇列長度,當該計數器的值 > (CPU數量的總數+1)時,說明出現處理器阻塞。一般情況下,Processor:%Process Time很高時,都會伴隨著處理器阻塞,但產生處理器阻塞時,Processor:%Process Time 計數器的值並不一定很高,此時就需要分析產生處理器阻塞的原因。
2. MEM分析方法
MEM監控涉及的效能計數器主要是% Commitued Bytes in Use、Available Bytes,如果% Commitued Bytes in Use計數器顯示的數值比較大,則系統可能存在記憶體瓶頸,可以根據Available Bytes計數器的數值進一步判斷,如果該值小,說明可用記憶體不足,存在效能瓶頸;另外,需要注意Pages/sec、Pages Read/sec和Page Faults/sec的數值,這些指標反映了作業系統進行磁碟交換的頻率。如果Pages/sec的數值持續較高(如幾百的數值),可能存在記憶體瓶頸,但不排除可能是程式使用記憶體對映檔案所致;如果Page Faults/sec的數值較高,說明頁面失效頻率較高,作業系統向記憶體讀取的次數較多;通常,Pages Read/sec計數器的數值,一般不要超過5,否則很可能存在記憶體瓶頸。
3. 磁碟IO分析方法
磁碟I/O監控涉及的效能計數器主要是 % Busy Time、Avg. Disk Queue Length、Current Disk Queue Length,若% Busy Time效能計數器的數值比較大,則硬碟可能存在瓶頸。另外,對於順序讀寫的應用,需要計算IOPS,如果實際得到的IOPS等於或超過了磁碟標稱的IO能力,則該磁碟存在效能瓶頸。
4. NET分析方法
NET監控涉及的效能計數器主要是Bytes Total/sec,通過該計數器值與網路頻寬數值進行比較,可以判斷網路連結速度是否存在瓶頸。
4 其他資源
關於python學習、分享、交流,筆者開通了微信公眾號【小蟒社群】,感興趣的朋友可以關注下,歡迎加入,建立屬於我們自己的小圈子,一起學python。