一、Perfmon簡介
Perfmon(Performance Monitor)是一款Windows自帶的性能監控工具,提供了圖表化的系統性能實時監視器、性能日志和警報管理。通過添加性能計數器(Performance Counter)可以實現對CPU、內存、網絡、磁盤、進程等多類對象的上百個指標的監控。其中,性能日志可定義輸出格式為二進制文件、文本文件、SQLSERVER記錄等,以方便后續使用第三方工具進行分析。
二、Perfmon的啟用和監控設置
Perfmon使用方法:
2.1 Windows開始中輸入perfmon后回車,即可打開perfmon.exe
2.2 點擊性能監視器;
2.3 在右窗格中單擊右鍵,然后單擊“添加計數器”;或點擊監控圖上方的"+"也可以打開添加計數器的窗口;
2.4 在性能對象列表中,選擇所需的性能指標計數器類別,以在Perfmon.exe中顯示對應指標的監控圖形,然后單擊【添加】-->【確認】
2.5 在計數器勾選區域:
選中監控圖底部的某個計數器,右鍵【屬性】,可編輯該計數器的線條顏色、寬度等樣式
2.6 通過切換點擊不同的計數器類別,可實時觀察到所統計的【最新值、平均值、最小值、最大值、持續時間】
2.7 在監控圖區域
右鍵【屬性】,可設置采樣的持續時間(默認100s)、每間隔多少時間采樣一次
右鍵【圖形另存為】,可將本地性能監控的采樣圖保存到本地
右鍵【清除】,可將當前監控上的采樣圖清空,而后從左至右繼續開始新的采樣圖
三、性能分析方法
1、cpu--Processor處理器
- processor% Processor Time總 :CPU當前利用率(百分比)=%user+%sys(參考值<=80%),若該值持續超過90%,說明整個系統面臨着處理器方面的瓶頸,需要通過增加處理器來提高性能。
- processor%User Time用戶: 與%Privileged Time計數器正好相反,指的是在用戶狀態模式下(即非特權模式)的操作所花的時間百分比。如果該值較大,可以考慮是否通過算法優化等方法降低這個值。如果該服務器是數據庫服務器,導致此值較大的原因很可能是數據庫的排序或是函數操作消耗了過多的CPU時間,此時可以考慮對數據庫系統進行優化。
- processor%Priviliaged Time系統:CPU在特權模式下處理線程所花的時間百分比。一般的系統服務,進城管理,內存管理等一些由操作系統自行啟動的進程屬於這類
- processor%DPC Time:處理器在網絡處理上消耗的時間,該值越低越好。在多處理器系統中,如果這個值大於50%並且%Processor Time非常高,加入一個網卡可能會提高性能
- system%Process Queue Length:線程在等待分配CPU資源所排隊列的長度,此長度不包括正在占有CPU資源的線程。如果該隊列的長度大於處理器個數+1,就表示處理器有可能處於阻塞狀態(參考值:<=處理器個數+1)
cpu監測總結:
(1)首先看System:% Total Processor Time
性能計數器的計數值
該計數器的數值體現服務器整體處理器的利用率,對多處理器的系統而言,該計數器體現的是所有CPU的平均利用率。如果該值持續超過90%,則說明整個系統面臨着處理器方面的瓶頸,需要通過增加處理器來提高性能。
(2)其次查看每個CPU的% User Time
%User Time
是系統的非核心操作消耗的CPU時間,如果該值較大,可以考慮是否能通過友好算法等方法降低這個值。如果該服務器是數據庫服務器,%User Time
值大的原因很可能是數據庫的排序或是函數操作消耗了過多的CPU時間,此時可以考慮對數據庫系統進行優化。
(3)研究系統處理器瓶頸:查看System:Processor Queue Length
計數器的值
當該計數器的值 > (CPU數量的總數+1)時,說明產生了處理器阻塞。在處理器的% Process Time
很高時,一般都隨處理器阻塞,但產生處理器阻塞時,Processor:%Process Time
計數器的值並不一定很大,此時就必須查找處理器阻塞的原因。
2、內存--memory
內存分析:用於判斷系統有無內存瓶頸,是否需要通過增加內存等手段提高系統性能表現
內存分析的主要方法和步驟:
(1)首先查看Memory:% Commitued Bytes in Use
指標
如果該指標數值比較大,系統可能出現了內存方面的問題,需要繼續下面步驟進一步分析。
另外也可以查看Available Bytes可用物理內存(
,如果該值小,則說明可用內存不足,存在性能瓶頸。參考值:>=10%
)
如果 Available Bytes 的值很小(4 MB 或更小),則說明計算機上總的內存可能不足,或某程序沒有釋放內存。
(2)注意Pages/sec
、Pages Read/sec
和Page Faults/sec
的值
操作系統會利用磁盤較好的方式提高系統可用內存量or提高內存的使用效率,這三個指標直接反應了操作系統進行磁盤交換的頻度。
Pages/sec: 表明由於硬件頁面錯誤而從磁盤取出的頁面數(參考值:0-20),或由於頁面錯誤而寫入磁盤以釋放[url=]工作[/url]集空間的頁面數。
如果 Pages/sec 的值為 20 或更大,那么您應該進一步研究頁交換活動
;Pages/sec
值不一定大就表明有內存問題,可能是運行使用內存映射文件的程序所致。
Page Input/sec:表示為了解決硬錯誤而寫入硬盤的頁數(參考值:>=Page Reads/sec)
Page Reads/sec:表示為了解決硬錯誤而從硬盤上讀取的頁數。(參考值: <=5)
Page Faults/sec:
表示每秒鍾處理的錯誤頁數,包括硬錯誤和軟錯誤,
當處理器在內存中讀取某一頁出現錯誤時,就會產生缺頁中斷,也就是 page Fault。
此時需要查看Pages Read/sec
的計數值,該計數器的閥值為5,如果計數值>5,則可以判斷存在內存方面的問題。
如果這個頁
位於內存的其他位置,這種錯誤稱為軟錯誤,用Transition Fault/sec 來衡量;
如果這個頁位於硬盤上,必須從硬盤重新讀取,這個錯誤成為硬錯誤。硬錯誤會使系統的運行效率很快將下來。
Cathe Bytes:文件系統的緩存(默認為50%的可用物理內存)
內存泄露分析:
1、如果懷疑有內存泄露,請監視 Memory/Available Bytes 和 Memory/ Committed Bytes,以觀察內存行為,並監視你認為可能在泄露內存的進程的 Process/ Private Bytes、Process/ Working Set 和Process/ Handle Count。
2、如果懷疑是內核模式進程導致了泄露,則還應該監視 Memory/ Pool Nonpaged Bytes、Memory/ Pool Nonpaged Allocs 和 Process(process_name)/ Pool Nonpaged Bytes
如果發生了內存泄漏,process\private bytes計數器和process\working set 計數器的值往往會升高,同時avaiable bytes的值會降低
private Bytes:是指進程所分配的無法與其他進程共享的當前字節數量。該計數器主要用來判斷進程在性能測試過程中有無內存泄漏。
例如:對於一個IIS之上的web應用,我們可以重點監控inetinfo進程的Private Bytes,如果在性能測試過程中,該進程的Private Bytes計數器值不斷增加,或是性能測試停止后一段時間,該進程的Private Bytes仍然持續在高水平,則說明應用存在內存泄漏。
3、檢查過於頻繁的頁交換
由於過多的頁交換要使用大量的硬盤空間,因此有可能將導致將頁交換內存不足,這容易與導致頁交換的磁盤瓶頸混淆。因此,在研究內存不足不太明顯的頁交換的原因時,您必須跟蹤如下的磁盤使用情況計數器和內存計數器:
· Physical Disk\ % Disk Time
· Physical Disk\ Avg.Disk Queue Length
例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果頁面讀取操作速率很低,同時 % Disk Time 和 Avg.Disk Queue Length的值很高,則可能有磁盤瓶徑。但是,如果隊列長度增加的同時頁面讀取速率並未降低,則內存不足。
要確定過多的頁交換對磁盤活動的影響,請將 Physical Disk\ Avg.Disk sec/Transfer 和 Memory\ Pages/sec 計數器的值增大數倍。如果這些計數器的計數結果超過了 0.1,那么頁交換將花費百分之十以上的磁盤訪問時間。如果長時間發生這種情況,那么您可能需要更多的內存
4、研究程序的活動
檢查正在運行的程序導致的過多的頁交換。如果可能,請停止具有最高工作集值的程序,然后查看頁交換速率是否有顯著變化。如果您懷疑存在過多的頁交換,請檢查 Memory\ Pages/sec 計數器。該計數器顯示由於頁面不在物理內存中而需要從磁盤讀取的頁面數。(注意該計數器與 Page Faults/sec 的區別,后者只表明數據不能在內存的指定工作集中立即使用。)
3、磁盤I/O分析方法--Disk
(1)計算每磁盤的IO數
每磁盤的I/O數可用來與磁盤的I/O能力進行對比,如果經過計算得到的每磁盤I/O數超過了磁盤標稱的I/O能力,則說明確實存在磁盤的性能瓶頸。
- PhysicalDisk\Disk Time: 指所選磁盤驅動器忙於為讀或寫入請求提供服務所用的時間的百分比(值總是會大於100%),如果只有%Disk Time比較大,硬盤有可能是瓶頸---- 為什么值會大於100%:https://www.cnblogs.com/zhengna/p/9989526.html=
- Physical Disk\Current Disk Queue Length: 等待進行磁盤訪問的當前系統請求數量
- PhysicalDisk\Avg. Disk sec/Read: 在磁盤上讀取數據的所需平均時間(單位s)。
- PhysicalDisk\ Avg. Disk sec/Write: 在此盤上寫入數據的所需平均時間(單位s)。
- Physical Disk\ Disk Reads/sec: 在讀取操作時從磁盤上傳送的字節平均數。
- Physical Disk\ DiskWrites/sec: 在寫入操作時從磁盤上傳送的字節平均數。
- Physical Disk\ Avg.Disk sec/Transfer: 反映磁盤完成請求所用的時間。較高的值表明磁盤控制器由於失敗而不斷重試該磁盤。這些故障會增加平均磁盤傳送時間。一般來說,定義該值小於15ms最為優異,介於15-30ms之間為良好,30-60ms之間為可以接受,超過60ms則需要考慮更換硬盤或硬盤的RAID方式了
- %Disk Time和Avg.Disk Queue Length: RAID 磁盤中的 % Disk Time 計數器會指示大於 100% 的值。如果出現這種情況,則使用 PhysicalDisk: Avg.Disk Queue Length計數器來確定等待進行磁盤訪問的平均系統請求數量。如果不是RAID,則使用 % Disk Time 和 Current Disk Queue Length計數器確定是否磁盤存在瓶頸,如果這兩個計數器的值一直很高,則可能是磁盤存在瓶頸
4、網絡分析方法
(1)Network Interface:Bytes Total/sec(參考值:該計數器和網絡帶寬相除,<50%)
Bytes Total/sec
為發送和接收字節的速率,可以通過該計數器值來判斷網絡鏈接速度是否是瓶頸,具體操作方法是用該計數器的值和目前網絡的帶寬進行比較。
5、進程
- 查看進程的%Processor Time值
每個進程的%Processor Time反映進程所消耗的處理器時間。用不同進程所消耗的處理器時間進行對比,可以很容易的看出具體是哪個進程在[url=]性能測試[/url]過程中消耗了最多的處理器時間,從而可以據此針對應用進行優化。
- 查看每個進程產生的頁面失效
可以用每個進程產生的頁面失效(通過Process\Page Failures/sec計數器獲得)和系統的頁面失效(可通過Memory\Page Failures/sec計數器獲得)的比值,來判斷哪個進程產生了最多的失效頁面,這個進程要么是需要大量內存的進程,要么是非常活躍的進程,可以對其進行中的分析。
- 了解進程的Process\Private Bytes
Process\Private Bytes是指進程所分配的無法與其他進程共享的當前字節數量。該計數器主要用拉判斷進程在性能測試過程中有無內存泄漏。
例如:對於一個IIS之上的web應用,我們可以重點監控inetinfo進程的Private Bytes,如果在性能測試過程中,該進程的Private Bytes計數器值不斷增加,或是性能測試停止后一段時間,該進程的Private Bytes仍然持續在高水平,則說明應用存在內存泄漏。
(備注:進程分析方法用到的計數器主要有:Process\%Processor Time、Page Failures/sec、Page Failures/sec、Private Bytes)
參考文檔:https://www.cnblogs.com/liangqihui/p/9502928.html