1 Perfmon簡介
Perfmon(Performance Monitor)是一款Windows自帶的性能監控工具,提供了圖表化的系統性能實時螢幕、性能日志和警報管理。通過添加性能計數器(Performance Counter)可以實作對CPU、記憶體、網絡、磁盤、程序等多類對象的上百個名額的監控。其中,性能日志可定義輸出格式為二進制檔案、文本檔案、SQLSERVER記錄等,以友善後續使用第三方工具進行分析。
2 Perfmon使用
Perfmon支援選擇性的監控感興趣的性能計數器,名額範圍廣、粒度細,而且支援将監控資料持久化。當然,如果隻是關注性能主要名額(cpu、mem、io、net),也可以直接檢視資料總管(Resmon.exe)。本文主要介紹使用Perfmon進行性能監控的通用方法,更細節的内容請參考其他文檔,如,微軟官方文檔或Perfmon幫助文檔:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc749249(v=ws.11)
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 常用性能對象和計數器
計數器 | ||
% Idle Time | % Idle Time 是處理器在采樣期間空閑的時間的百分比 | |
% Processor Time | % Processor Time 指處理器用來執行非閑置線程時間的百分比。計算方法是,測量範例間隔内非閑置線程活動的時間,用範例間隔減去該值。這個計數器是處理器活動的主要說明器,顯示在範例間隔時所觀察的繁忙時間平均百分比。 | |
% User Time | % User Time 指處理器處于使用者模式的時間百分比。使用者模式是為應用程式、環境分系統和整數分系統設計的有限處理模式。 | |
Available Bytes | Available Bytes顯示出目前空閑的實體記憶體總量。當這個數值變小時,Windows開始頻繁地調用磁盤頁面檔案。如果這個數值很小,例如小于5 MB,系統會将大部分時間消耗在操作頁面檔案上。 | |
% Committed Bytes in Use | % Committed Bytes In Use 是 Memory: Committed Bytes 與Memory: Commit Limit之間的比值。(Committed memory指如果需要寫入磁盤時已在分頁檔案中保留白間的處于使用中的實體記憶體。Commit Limit是由分頁檔案的大小而決定的。如果擴大了分頁檔案,該比例就會減小)。這個計數器隻顯示目前百分比;而不是一個平均值。 | |
Page Faults/sec | Page Faults/sec是指處理器處理錯誤頁的綜合速率。用錯誤頁數/秒來計算。當處理器請求一個不在其工作集(在實體記憶體中的空間)内的代碼或資料時出現 的頁錯誤。這個計數器包括硬錯誤(那些需要磁盤通路的)和軟錯誤(在實體記憶體的其它地方找到的錯誤頁)。許多處理器可以在有大量軟錯誤的情況下繼續操作。 但是,硬錯誤可以導緻明顯的拖延。這個計數器顯示用上兩個執行個體中觀察到的值之間的差除以執行個體間隔的持續時間所得的值。 | |
Network Interface | Bytes Total/sec | Bytes Total/sec是發送和接收位元組的速率,包括幀字元在内。 |
Packets/sec | Packets/sec為發送和接收資料包的速率。 | |
Physical Disk | % Busy Time | % Busy Time指磁盤驅動器忙于為讀或寫入請求提供服務所用的時間的百分比。 |
Avg. Disk Queue Length | Avg. Disk Queue Length 是指磁盤隊列的平均長度。磁盤完成對讀取和寫入請求的處理時間,是磁盤資料吞吐量的外在表現。 | |
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 其他資源