Perfmon(Performance Monitor)是一款Windows自帶的性能監控工具,提供了圖表化的系統性能實時監視器、性能日誌和警報管理。經過添加性能計數器(Performance Counter)能夠實現對CPU、內存、網絡、磁盤、進程等多類對象的上百個指標的監控。其中,性能日誌可定義輸出格式爲二進制文件、文本文件、SQLSERVER記錄等,以方便後續使用第三方工具進行分析。
python
Perfmon支持選擇性的監控感興趣的性能計數器,指標範圍廣、粒度細,並且支持將監控數據持久化。固然,若是隻是關注性能主要指標(cpu、mem、io、net),也能夠直接查看資源管理器(Resmon.exe)。本文主要介紹使用Perfmon進行性能監控的通用方法,更細節的內容請參考其餘文檔,如,微軟官方文檔或Perfmon幫助文檔:web
2.1 Perfmon使用方法
瀏覽器
Perfmon是windows自帶工具,無需安裝,鍵入命令便可打開工具,具體步驟以下:緩存
1. 開始-->搜索程序和文件,輸入perfmon,回車後便可打開工具;服務器
2. 雙擊左側導航欄的【性能監視器】,而後在右窗格中單擊鼠標右鍵或」+」,選擇「添加計數器」,如圖:微信
3. 在」性能對象」列表,選擇須要監控的計數器,添加後便可進行實時監控,如圖所示是選擇監控cpu的計數器:網絡
監控計數器添加完成後,能夠查看到圖形實時變化,如上圖,計數器%Processor Time表示cpu的利用率,從圖中能夠看到最新值、平均值、最小和最大值,以及監控持續時間,其中,這裏的持續時間是指當前配置顯示在圖表中的時間跨度,並非已經監控的時間,該配置能夠右鍵點擊圖標->屬性->常規->持續時間中配置。另外,監控圖上右鍵點擊,能夠對計算器進行操做,如添加、刪除、隱藏、保存、更改屬性等操做。app
經過上節描述,已經可使用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.1節中介紹了Perfmon性能監視器的使用方法,該功能主要用於對指定的性能指標進行實時監控(相似nmon的交互模式),但它不能把監控的數據保存下來。若是須要持續對系統的指定性能指標進行監控,就須要使用Perfmon的計數器日誌功能(類比nmon的後臺監控模式),計數器日誌能夠把監控數據以指定的方式進行保存,同時也方便後續用第三方工具進行分析。
接下來,以監控CPU\MEM爲例介紹Perfmon計數器日誌的使用方法。
1. 在Perfmon右側導航窗格中,展開「數據收集器集」,右鍵單擊「用戶定義」,指向「新建」,而後單擊「數據收集器集」,將啓動「建立新數據收集器集」嚮導;
2. 填入收集器名稱,選擇」手動建立(高級)」,點擊下一步進入選擇數據類型嚮導,如圖:
3. 選擇「性能計數器」,點擊下一步,進入性能計數器選擇界面,經過點擊」添加」按鈕添加CPU\MEM的性能計數器,同時,能夠根據採集時長自定義採樣間隔,默認是15s,如圖:
4. 若是須要自定義日誌的保存位置,能夠點擊」下一步」,不然能夠直接點擊「完成」,結束配置。
5. 另外,能夠右鍵單擊採集器集名稱,選擇屬性,配置監控任務的啓停條件,如,配置定時任務或退出條件等,如圖爲配置採集30s後中止:
6. 如需對監控的性能指標、日誌格式、採樣時間等進行調整,能夠右鍵單擊數據收集任務,選擇屬性,編輯便可,能夠增刪計數器、修改日誌格式(默認二進制的.blg)、修改採樣間隔等,如圖:
7. 最後,點擊工具欄啓動數據收集器便可;
8. 結果收集完成後,能夠在右側導航欄選擇」報告」,展開「用戶自定義」,查看報告;也能夠經過「性能監視器」的「查看日誌數據」選擇要加載顯示的日誌文件。
本節主要介紹使用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。