qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          性能測試–性能監視器

          這篇文章是繼上一篇“windows性能監視器常用計數器”之后再次介紹關于windows操作系統中的性能監視器。這次我們從軟件測試性能測試角度去看windows提供的性能監視器。

            性能計數器(counter)是描述服務器或操作系統性能的一些數據指標。計數器在性能測試中發揮著“監控和分析”的關鍵作用,尤其是在分析系統的可擴展 性、進行性能瓶頸的定位時,對計數器的取值的分析非常關鍵。但必須說明的是,單一的性能計數器只能體現系統性能的某一個方面,對性能測試結果的分析必須基于多個不同的計數器。

            與性能計數器相關的另一個術語是“資源利用率”。該術語指的是系統各種資源的使用狀況。為了方便比較,一般用“資源的實際使用/總的資源可用量”形成資源利用率的數據,用以進行各種資源使用的比較。

            性能測試之內存篇(windows)

            要監視內存不足的狀況,請從以下的對象計數器開始:

            · Memory\ Available Bytes

            · Memory\ Pages/sec

            Available Bytes剩余的可用物理內存,單位是兆字節(參考值:>=10%)。表明進程當前可使用的內存字節數。Pages/sec 表明由于硬件頁面錯誤而從磁盤取出的頁面數,或由于頁面錯誤而寫入磁盤以釋放工作集空間的頁面數。

            如果 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)

            必須同時監視 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)

            監視“處理器”和“系統”對象計數器可以提供關于處理器使用的有價值的信息,幫助您決定是否存在瓶頸。需要包含下列內容:

            Processor\ % Total Processor Time 獲得處理器整體使用情況。

            該計數值用于體現服務器整體的處理器利用率,對多處理器的系統而言,該計數值體現的是所有CPU的平均利用率。如果該值的數值持續超過90%,則說明整個系統面臨著處理器方面的瓶頸,需要通過增加處理器來提高性能。

            要注意的是,由于操作系統本身的特性,在某些多CPU系統中,該數據本身并不大,但此時CPU之間的負載狀況極不均衡,此時也應該視作系統產生了處理器方面的瓶頸。

            監視 Processor\ % Processor Time、Processor\ % User Time 和 % Privileged Time 以獲得詳細信息。

            Processor\ % User Time是指系統的非核心操作消耗的CPU時間,如果該值較大,可以考慮是否通過優化算法等方法降低這個值。如果該服務器是數據庫服務 器,Processor\ % User Time大的原因很可能是數據庫的排序或是函數操作消耗了過多的CPU時間,此時可以考慮對數據庫系統進行優化。

            System\ Processor Queue Length 用于瓶頸檢測。

            %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 計數器。該計數器顯示處理器忙于執行非空閑線程所耗時間的百分比。

            檢查處理器使用時,請考慮計算機的角色和所完成工作的類型。根據計算機進行的工作,較高的處理器值意味著系統正有效地處理較重的工作負載或正在努力維持。例如,如果正在監視用戶的計算機,并且該計算機用于計算,計算程序可能容易使用 100% 的處理器時間。即使這會造成該計算機中其他應用程序的性能受到影響,但可以通過改變負載來解決。

            另一方面,在處理許多客戶請求的服務器計算機中,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軟件測試網

            t#e_5I:N2y8@"a:X:Y

            例如,如果所有處理器平均忙半個采樣間隔,則顯示 50%。如果半數處理器忙整個間隔,而其他的處理器空閑,則也顯示 50%。

            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

            網絡分析是一件技術含量很高的工作,在一般的組織中都有專門的網絡管理人員進行網絡分析,對測試工程師來說,如果懷疑網絡是系統的瓶頸,可以要求網絡仍有來寫真進行網絡方面的檢測。

            Network Interface\Bytes Total/sec為發送和接收字節的速率(包括幀字符在內)。可以通過該計數器的值判斷網絡連接速度是否是瓶頸,具體操作方法是用該計數器的值與目前的網絡帶寬進行比較。

            Byte Total/sec

            表示網絡中接受和發送字節的速度,可以用該計數器來判斷網絡是否存在瓶頸(參考值:該計數器和網絡帶寬相除,<50%)

            性能測試之進程篇(windows)

            查看進程的%Processor Time值

            每個進程的%Processor Time反映進程所消耗的處理器時間。用不同進程所消耗的處理器時間進行對比,可以很容易的看出具體是哪個進程在性能測試過程中消耗了最多的處理器時間,從而可以據此針對應用進行優化。

            查看每個進程產生的頁面失效

            可以用每個進程產生的頁面失效(通過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函數,另外您可以把這用作不同的進程之間共享數據的一種辦法。運用內存映射文件實際上沒有涉及實際的文件操作,它更象為每個進程保留一個看得見的內存空間。至于把內存映射文件當成進程間共享數據的辦法來用,則要加倍小心,因為您不得不處理數據的同步問題,否則您的應用程序也許 很可能得到過時或錯誤的數據甚至崩潰。

            內存映射文件本身還是有一些局限性的,譬如一旦您生成了一個內存映射文件,那么您在那個會話期間是不能夠改變它的大小的。所以內存映射文件對于只讀文件和不會影響其大小的文件操作是非常有用的。當然這并不意味著對于會引起改變其大小的文件操作就一定不能用內存影射文件的 方法,您可以事先估計操作后的文件的可能大小,然后生成這么大小一塊的內存映射文件,然后文件的長度就可以增長到這么一個大小。我們的解釋夠多的了,接下來我們就看看實現的細節:

            調用CreateFile打開您想要映射的文件。

            調用CreateFileMapping,其中要求傳入先前CreateFile返回的句柄,該函數生成一個建立在CreateFile函數創建的文件對象基礎上的內存映射對象。

            調用MapViewOfFile函數映射整個文件的一個區域或者整個文件到內存。該函數返回指向映射到內存的第一個字節的指針。

            用該指針來讀寫文件。

            調用UnmapViewOfFile來解除文件映射。

            調用CloseHandle來關閉內存映射文件。注意必須傳入內存映射文件的句柄。

            調用CloseHandle來關閉文件。注意必須傳入由CreateFile創建的文件的句柄。


          posted on 2013-07-08 14:19 順其自然EVO 閱讀(964) 評論(0)  編輯  收藏 所屬分類: 性能測試

          <2013年7月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 仁怀市| 平塘县| 奎屯市| 上虞市| 德兴市| 当雄县| 阿荣旗| 吴忠市| 汤原县| 曲松县| 大连市| 鄢陵县| 陈巴尔虎旗| 麦盖提县| 佳木斯市| 辽源市| 绥滨县| 高州市| 普格县| 简阳市| 汝阳县| 微山县| 武汉市| 巨鹿县| 达日县| 凤山县| 大石桥市| 东乌珠穆沁旗| 金乡县| 凤城市| 阿图什市| 五华县| 乾安县| 涟源市| 三江| 凤城市| 宁南县| 房产| 壶关县| 张家界市| 南郑县|