性能計數器(counter)是描述服務器或操做系統性能的一些數據指標。計數器在性能測試中發揮着「監控和分析」的關鍵做用,尤爲是在分析系統的可擴展性、進行性能瓶頸的定位時,對計數器的取值的分析很是關鍵。但必須說明的是,單一的性能計數器只能體現系統性能的某一個方面,對性能測試結果的分析必須基於多個不一樣的計數器。web
與性能計數器相關的另外一個術語是「資源利用率」。該術語指的是系統各類資源的使用情況。爲了方便比較,通常用「資源的實際使用/總的資源可用量」造成資源利用率的數據,用以進行各類資源使用的比較。算法
性能測試以內存篇(windows)數據庫
要監視內存不足的情況,請從如下的對象計數器開始:windows
· Memory\ Available Bytes緩存
· Memory\ Pages/sec服務器
Available Bytes剩餘的可用物理內存,單位是兆字節(參考值:>=10%)。代表進程當前可以使用的內存字節數。Pages/sec 代表因爲硬件頁面錯誤而從磁盤取出的頁面數,或因爲頁面錯誤而寫入磁盤以釋放[url=]工做[/url]集空間的頁面數。網絡
若是 Available Bytes 的值很小(4 MB 或更小),則說明計算機上總的內存可能不足,或某程序沒有釋放內存。若是 Pages/sec 的值爲 20 或更大,那麼您應該進一步研究頁交換活動。Pages/sec 的值很大不必定代表內存有問題,而多是運行使用內存映射文件的程序所致。多線程
操做系統常常會利用磁盤交換的方式提升系統可用的內存量或是提升內存的使用效率。下列四個 指標直接反映了操做系統進行磁盤交換的頻度。 Page Faults/sec 當處理器在內存中讀取某一頁出現錯誤時,就會產生缺頁中斷,也就是 page Fault。若是這個頁 位於內存的其餘位置,這種錯誤稱爲軟錯誤,用Transition Fault/sec 來衡量;若是這個頁位於硬盤上,必須從硬盤從新讀取,這個錯誤成爲硬錯誤。硬錯誤會使系統的運行效率很快將下來。Page Faults/sec這個計數器就表示每秒鐘處理的錯誤頁數,包括硬錯誤和軟錯誤。 Page Input/sec 表示爲了解決硬錯誤而寫入硬盤的頁數(參考值:>=Page Reads/sec) Page Reads/sec 表示爲了解決硬錯誤而從硬盤上讀取的頁數。(參考值: <=5) Pages/sec 表示爲了解決硬錯誤而從硬盤上讀取或寫入硬盤的頁數(參考值:00~20)app
必須同時監視 Available Bytes、Pages/sec 和 Paging File % Usage,以便肯定是否發生這種狀況。若是正在讀取非緩存內存映射文件,還應該查看緩存活動是否正常。函數
Cathe Bytes 文件系統的緩存(默認爲50%的可用物理內存)
內存泄露
· Memory\Available Bytes
· Memory\ Committed Bytes
若是您懷疑有內存泄露,請監視 Memory\Available Bytes 和 Memory\ Committed Bytes,以觀察內存行爲,並監視你認爲可能在泄露內存的進程的 Process\ Private Bytes、Process\ Working Set 和Process\ Handle Count。若是您懷疑是內核模式進程致使了泄露,則還應該監視 Memory\ Pool Nonpaged Bytes、Memory\ Pool Nonpaged Allocs 和 Process(process_name)\ Pool Nonpaged Bytes。
private Bytes 進程沒法與其餘進程共享的字節數量。該計數器的值較大時,有多是內存泄露的信號
檢查過於頻繁的頁交換
因爲過多的頁交換要使用大量的硬盤空間,所以有可能將致使將頁交換內存不足,這容易與致使頁交換的磁盤瓶頸混淆。所以,在研究內存不足不太明顯的頁交換的緣由時,您必須跟蹤以下的磁盤使用狀況計數器和內存計數器:
· 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,那麼頁交換將花費百分之十以上的磁盤訪問時間。若是長時間發生這種狀況,那麼您可能須要更多的內存。
研究程序的活動
接下來,檢查正在運行的程序致使的過多的頁交換。若是可能,請中止具備最高工做集值的程序,而後查看頁交換速率是否有顯著變化。若是您懷疑存在過多的頁交換,請檢查 Memory\ Pages/sec 計數器。該計數器顯示因爲頁面不在物理內存中而須要從磁盤讀取的頁面數。(注意該計數器與 Page Faults/sec 的區別,後者只代表數據不能在內存的指定工做集中當即使用。)
性能測試之處理器篇(windows)
監視「處理器」和「系統」對象計數器能夠提供關於處理器使用的有價值的信息,幫助您決定是否存在瓶頸。須要包含下列內容:
該計數值用於體現服務器總體的處理器利用率,對多處理器的系統而言,該計數值體現的是全部CPU的平均利用率。若是該值的數值持續超過90%,則說明整個系統面臨着處理器方面的瓶頸,須要經過增長處理器來提升性能。
要注意的是,因爲操做系統自己的特性,在某些多CPU系統中,該數據自己並不大,但此時CPU之間的負載情況極不均衡,此時也應該視做系統產生了處理器方面的瓶頸。
Processor\ % User Time是指系統的非核心操做消耗的CPU時間,若是該值較大,能夠考慮是否經過優化算法等方法下降這個值。若是該服務器是數據庫服務器,Processor\ % User Time大的緣由極可能是數據庫的排序或是函數操做消耗了過多的CPU時間,此時能夠考慮對數據庫系統進行優化。
%Total Processor Time 系統中全部處理器都處於繁忙狀態的時間百分比,對於多處理器系統來講,該值能夠反映全部處理器的平均繁忙狀態,該值爲100%,若是有一半的處理器爲繁忙狀態,該值爲50%
File Data Operations/sec 計算機對文件系統進行讀取和寫入操做的頻率,可是不包括文件控制操做
Process Queue Length 線程在等待分配CPU資源所排隊列的長度,此長度不包括正在佔有CPU資源的線程。若是該隊列的長度大於處理器個數+1,就表示處理器有可能處於阻塞狀態(參考值:<=處理器個數+1)
%Processor Time CPU利用率,該計數器最爲經常使用,能夠查看處理器是否處於飽和狀態,若是該值持續超過 95%,就表示當前系統的瓶頸爲CPU,能夠考慮增長一個處理器或更換一個性能更好的處理器。(參考值:<80%)
%Priviliaged Time CPU在特權模式下處理線程所花的時間百分比。通常的系統服務,進城管理,內存管理等一些由操做系統自行啓動的進程屬於這類
%User Time 與%Privileged Time計數器正好相反,指的是在用戶狀態模式下(即非特權模式)的操做所花的時間百分比。若是該值較大,能夠考慮是否經過算法優化等方法下降這個值。若是該服務器是數據庫服務器,致使此值較大的緣由極可能是數據庫的排序或是函數操做消耗了過多的CPU時間,此時能夠考慮對數據庫系統進行優化。
%DPC Time 處理器在網絡處理上消耗的時間,該值越低越好。在多處理器系統中,若是這個值大於50%而且%Processor Time很是高,加入一個網卡可能會提升性能。
觀察處理器使用狀況的值
要測量處理器的活動,請查看 Processor\ % Processor Time 計數器。該計數器顯示處理器忙於執行非空閒線程所耗時間的百分比。
檢查處理器使用時,請考慮計算機的角色和所完成[url=]工做[/url]的類型。根據計算機進行的工做,較高的處理器值意味着系統正有效地處理較重的工做負載或正在努力維持。例如,若是正在監視用戶的計算機,而且該計算機用於計算,計算程序可能容易使用 100% 的處理器時間。即便這會形成該計算機中[url=]其餘[/url]應用程序的性能受到影響,但能夠經過改變負載來解決。
另外一方面,在處理許多客戶請求的服務器計算機中,100% 左右的值表示這些過程在隊列中,正在等待處理器時間,而且形成瓶頸。如此持續高層次的處理器使用對服務器而言是沒法接受的。
考察處理器瓶頸
進程的線程所須要的處理器週期超出可用週期時,處理器瓶頸將逐步顯示出來。能夠創建較長的處理器隊列,而且系統響應會受到影響。處理器瓶頸兩種常見的緣由是 CPU 限制程序和產生過多中斷的驅動程序或子系統組件。
要決定是否因爲對處理器時間的要求較高而存在處理器瓶頸,請查看 System\ Processor Queue Length 計數器。隊列中包含兩個或更多的項目則代表存在瓶頸。若是多個程序進程競爭大多數處理器時間,安裝更快速的處理器會提升吞吐量。若是正在運行多線程的進程,附加處理器會有所幫助,可是請注意,附加處理器可能只有有限的益處。
此外,跟蹤計算機的服務器工做隊列當前長度的 Server Work Queues\ Queue Length 計數器會顯示出處理器瓶頸。隊列長度持續大於 4 則表示可能出現處理器擁塞。此計數器是特定時間的值,而不是一段時間的平均值。
要決定中斷活動是否形成瓶頸,請觀察 Processor\ Interrupts/sec 計數器的值,該計數器測量來自輸入/輸出 (I/O) 設備的服務請求的速度。若是此計數器的值明顯增長,而系統活動沒有相應增長,則代表存在硬件問題。
也能夠對生成中斷的磁盤驅動器、網卡和其餘設備活動的間接指示器監視 Processor\ % Interrupt Time 時間。
注意
要檢測可能影響處理器性能的硬件問題,例如 IRQ 衝突,請觀察 System\ File Control Bytes/second 的值。
監視多處理器系統
要觀察多處理器計算機的效率,請使用下列附加計數器。
計數器 |
說明 |
Process\ % Processor Time |
過程的全部線程在每一個處理器上的處理器時間總和。 |
Processor(_Total)\ % Processor Time |
計算機中全部處理器的處理器活動的度量。 "N[{y8_0此計數器採樣間隔期間的全部處理器平均非空閒時間的總和,並用處理器數目除以該和。51Testing軟件測試網 |
Thread\ % Processor Time |
線程的處理器時間數 |
性能測試之磁盤篇(windows)
監測對象:PhysicalDisk 若是分析的計數器指標來自於數據庫服務器、文件服務器或是流媒體服務器,磁盤I/O對這些系統來講更容易成爲瓶頸。
每磁盤的I/O數可用來與磁盤的I/O能力進行對比,若是通過計算獲得的每磁盤I/O數超過了磁盤標稱的I/O能力,則說明確實存在磁盤的性能瓶頸。
下表給出了每磁盤I/O的計算公式:
RAID類型 |
計算方法 |
RAID0 |
(Reads+Writes)/Number of Disks |
RAID1 |
(Reads+2*Writes)/2 |
RAID5 |
[Reads+(4*Writes)]/Number of Disks |
RAID10 |
[Reads+(2*Writes)]/Number of Disks |
%Disk Time 表示磁盤驅動器爲讀取或寫入請求提供服務所用的時間百分比,若是隻有%Disk Time比較大,硬盤有多是瓶頸
Average Disk Queue Length 表示磁盤讀取和寫入請求提供服務所用的時間百分比,能夠經過增長磁盤構造磁盤陣列來提升性能(<=磁盤數的2倍)
Average Disk Read Queue Length 表示磁盤讀取請求的平均數
Average Disk write Queue Length 表示磁盤寫入請求的平均數
Average Disk sec/Read 磁盤中讀取數據的平均時間,單位是s
Disk Bytes/sec 提供磁盤系統的吞吐率。 決定工做負載的平衡 要平衡網絡服務器上的負載,須要瞭解服務器磁盤驅動器的繁忙程度。使用 Physical Disk\ % Disk Time 計數器,該計數器顯示驅動器活動時間的百分比。若是 % Disk Time 較高(超過 90%),請檢查 Physical Disk\ Current Disk Queue Length 計數器以查看正在等待磁盤訪問的系統請求數量。等待 I/O 請求的數量應當保持在不大於組成物理磁盤的主軸數的 1.5 到 2 倍。
Average Disk sec/Transfer 磁盤中寫入數據的平均時間,單位是s
計數器反映磁盤完成請求所用的時間。較高的值代表磁盤控制器因爲失敗而不斷重試該磁盤。這些故障會增長平均磁盤傳送時間。通常來講,定義該值小於15ms最爲優異,介於15-30ms之間爲良好,30-60ms之間爲能夠接受,超過60ms則須要考慮更換硬盤或硬盤的RAID方式了
Average Disk Bytes/Transfer
值大於 20 KB 表示該磁盤驅動器一般運行良好;若是應用程序正在訪問磁盤,則會產生較低的值。例如,隨機訪問磁盤的應用程序會增長平均 Disk sec/Transfer 時間,由於隨機傳送須要增長搜索時間。
性能測試之網絡篇(windows)
監測對象:Network Interface 網絡分析是一件[url=]技術[/url]含量很高的[url=]工做[/url],在通常的組織中都有專門的網絡管理人員進行網絡分析,對測試工程師來講,若是懷疑網絡是系統的瓶頸,能夠要求網絡仍有來寫真進行網絡方面的檢測。
Network Interface\Bytes Total/sec爲發送和接收字節的速率(包括幀字符在內)。能夠經過該計數器的值判斷網絡鏈接速度是不是瓶頸,具體操做方法是用該計數器的值與目前的網絡帶寬進行比較。
Byte Total/sec 表示網絡中接受和發送字節的速度,能夠用該計數器來判斷網絡是否存在瓶頸(參考值:該計數器和網絡帶寬相除,<50%)
性能測試之進程篇(windows)
查看進程的%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)
相關連接: ① 內存映射文件機制 內存映射文件是利用虛擬內存把文件映射到進程的地址空間中去,在此以後進程操做文件,就像操做進程空間裏的地址同樣了,省去了讀和寫I/O的時間。
好比使用memcpy等內存操做的函數。這種方法可以很好的應用在須要頻繁處理一個文件或者是一個大文件的場合,這種方式處理IO效率比普通IO效率要高。
利用內存映射文件您能夠認爲操做系統已經爲您把文件所有裝入了內存,而後您只要移動文件指針進行讀寫便可了。這樣您甚至不須要調用那些分配、釋放內存塊和文件輸入/輸出的API函數,另外您能夠把這用做不一樣的進程之間共享數據的一種辦法。運用內存映射文件實際上沒有涉及實際的文件操做,它更象爲每一個進程保留一個看得見的內存空間。至於把內存映射文件當成進程間共享數據的辦法來用,則要加倍當心,由於您不得不處理數據的同步問題,不然您的應用程序也許極可能獲得過期或錯誤的數據甚至崩潰。
內存映射文件自己仍是有一些侷限性的,譬如一旦您生成了一個內存映射文件,那麼您在那個會話期間是不可以改變它的大小的。因此內存映射文件對於只讀文件和不會影響其大小的文件操做是很是有用的。固然這並不意味着對於會引發改變其大小的文件操做就必定不能用內存影射文件的方法,您能夠事先估計操做後的文件的可能大小,而後生成這麼大小一塊的內存映射文件,而後文件的長度就能夠增加到這麼一個大小。咱們的解釋夠多的了,接下來咱們就看看實現的細節: