Windows性能管理解析

說到Windows環境下的性能管理,許多人首先想到的可能就是無處不在的Performance Monitor工具。早在Windows NT時代,Performance Monitor就是獲取性能信息的主要工具,當然,任務管理器Windows管理規範(Windows Management Instrumentation)也屬於 常用工具之列,它們不僅能夠提供性能數據,而且還能提供其他與性能有關的管理信息。本文介紹了一些充分發揮這些經典工具潛能的技巧,同時介紹了Windows XP新增的工具,探討如何運用它們來評估系統的性能情況。

一、什麼是性能管理?

對於許多管理員來說,Windows的性能管理不外乎打開控制面板→管理工具中的“性能”程序,即Performance Monitor程序,然後檢查一下CPU利用率、磁盤忙閒狀況、內存壓力,而且通常只有在出現性能問題時纔會去檢查,例如服務器響應突然變慢,或者用戶不能訪問服務器。這種性能管理方式完全屬於事後補救的方式,只起到了救火隊員的作用,由於缺乏詳盡、明確的事前評估、規劃,算不上優秀的策略。要實現有效的性能管理,一定要在出現問題之前掌握系統的性能情況。

只有事先採取有效的性能管理策略,才能全面掌握系統的性能特徵,在此基礎上,就可以估計何時可能出現性能問題以及問題的具體表現。預先收集的性能數據還可以用來規劃未來的運算能力需求,例如,假設有一個IIS Web服務器,當併發用戶數量是200時CPU的利用率是60%,據此可以推斷系統負載何時達到極限,以及達到負載極限時能夠支持的併發用戶數量。另外,根據網站的增長情況,還可以估計出何時需要增添硬件設備。

系統的整體性能由許多因素決定,例如CPU利用率,CPU隊列長度(即,有多少任務正在等待CPU的服務),磁盤忙閒程度(即,磁盤驅動器有多少時間用於響應請求),可用的物理內存,網絡接口的利用情況,等等,表一概括了最常用的性能計數器。

表一:重要的性能計數器
性能對象 計數器 提供的信息
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才能保持良好的性能。
Processor % Processor Time % Processor Time指處理器執行非閒置線程時間的百分比。這個計數器設計成用來作爲處理器活動的主要指示器。它通過在每個範例間隔中衡量處理器用於執行閒置處理線程的時間,並且用100%減去該值得出。(每個處理器有一個閒置線程,該線程在沒有其它線程可以運行時消耗週期)。可將其視爲範例間隔用於做有用工作的百分比。
Processor % User Time % User Time指用於用戶模式的非閒置處理器時間的百分比(用戶模式是爲應用程序、環境分系統和整數分系統設計的有限處理模式。另一個模式爲特權模式,它是爲操作系統組件設計的並且允許直接訪問硬件和所有內存。操作系統將應用程序線程轉換成特權模式以訪問操作系統服務)。這個計數值將平均忙時作爲實例時間的一部分顯示。
Server Work Queues Queue Length Queue Length指CPU當前的服務器作業隊列長度。隊列長度長時間超過四可能表示處理器堵塞。此值爲即時計數,不是一段時間的平均值。
System Processor Queue Length Processor Queue Length是指處理隊列中的線程數。即使在有多個處理器的計算機上處理器時間也會有一個單隊列。不象磁盤計數器,這個計數器僅計數就緒的線程,而不計數運行中的線程。如果處理器隊列中總是有兩個以上的線程通常表示處理器堵塞。這個計數器僅顯示上一次觀察的值;而不是一個平均值。
TCP Segments Retransmitted/sec Segments Retransmitted/sec指程序段重新傳輸的速率,即傳輸的程序段中包含一個或多個以前傳輸過的字節。

 二、定製性能監視器 在Windows 2K/XP中,Performance Monitor仍是最常用的性能管理工具。當然,新版的工具不少地方已經改進,增添了不少功能。在Win 2K中,性能監視器以一個管理控制檯(MMC)單元的形式實現。啓動Win 2K/XP的性能監視器,可以看到類似圖一的界面。


圖一

在Win XP中,性能監視器默認裝入三個計數器:Pages/sec,Avg. Disk Queue Length,% Processor Time。這三個計數器無法直接刪除,但一直留着又降低了監視器啓動速度。

如果要讓監視器啓動時不裝入任何計數器,首先要清除/%systemroot%/system32目錄下perfmon.msc文件的只讀屬性:進入命令窗口,轉到system32目錄,執行命令attrib r perfmon.msc。然後重新啓動計數器,選中一個計數器,點擊工具欄上黑色的“X”按鈕即可刪除一個計數器。選擇菜單“文件”→“保存”,將更改後的管理控制檯保存到磁盤。如果要將管理控制檯執行標記成只讀,只需在命令行上執行attrib +r perfmon.msc即可。

 在NT 4.0中,性能監視器包含一個實時圖表,另外還有記錄日誌和報警功能,但在Win 2K和XP的中,這些功能分開了。在Win 2K/XP中,實時性能圖表變成了“系統監視器”,系統監視器之下是日誌和警報工具。系統監視器可以看作一個純粹的實時性能數據察看工具,只能看,不能保存,點擊工具欄上的“+”按鈕可以添加新的性能計數器。性能日誌和警報工具則具有操作歷史數據的功能。

 如果要創建一個只有系統監視器、不帶性能日誌和警報工具的管理控制檯,可按如下步驟操作:執行“MMC”命令,打開一個空白的MMC窗口,選擇菜單“文件”→“添加/刪除管理單元”,點擊“添加”,選擇“ActiveX控件”,再點擊“添加”,在嚮導中選擇System Monitor Control,確認即可。

 三、性能日誌和警報工具
系統監視器只能簡單地查看實時性能數據,如果需要長期的、持久化的性能數據,必須使用性能日誌和警報工具。性能日誌工具能夠在一個日誌文件中集中記錄來自本地或遠程的多個系統的性能數據,這些日誌數據可以用系統監視器查看或用其他工具處理。擴展控制檯中的“性能日誌和警報”節點,可以看到它的三個分支:計數器日誌,跟蹤日誌,警報。警報工具的功能很簡單,就是當某個計數器的性能數據達到指定的值時,執行一定的動作,例如發送Email或用Net Send命令發送消息。下面我們主要討論的是日誌工具。 爲了說明如何使用計數器日誌,我們要新建一個日誌會話。右擊“計數器日誌”節點,選擇“新建日誌設置”,指定日誌設置的名稱,點擊“確定”,出現圖二的對話框,在這裏設定要在日誌中記錄的計數器。



圖二

日誌文件的默認保存路徑是C:/perflogs目錄,可以在對話框的“日誌文件”頁修改,但首先要設置待記錄的對象和計數器才能轉到“日誌文件”頁。點擊“添加對象”按鈕,將某個監視對象的所有計數器加入日誌記錄,或者點擊“添加計數器”按鈕加入單個計數器。無論選擇哪種加入選項,監視目標(對象或計數器)都可以是本地的,也可以是遠程機器的。 如果要長期收集性能數據,最好調整一下采樣間隔時間——特別地,如果要監視的計數器很多,而且來自不同的機器,如果採樣間隔時間設置得太小,日誌文件很快會變得很大。從每隔15分鐘採樣一次開始,試運行一段時間,看看日誌文件變得多大了,然後再作相應的調整。 如果要連接遠程機器,可以在“運行方式”輸入框提供登錄遠程機器的用戶名字。 收集性能監視數據需要一定的權限,HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Perflib註冊子鍵控制着對性能監視數據的訪問,性能監視數據正是通過該註冊子鍵流到系統監視器之類的工具。用右鍵點擊該註冊子鍵,選擇菜單“權限”,如圖三,調整這裏的權限分配也就調整了有權訪問性能數據的用戶。



圖三


設置好要監視的對象和計數器之後,可以在“日誌文件”頁調整日誌文件的格式,在“計劃”頁設置啓動、停止日誌的時間。如果設置成手工啓動,啓動方式是在MMC窗口中右擊日誌會話並選擇“啓動”。 在“日誌文件”頁中,如圖四,性能計數器日誌除了默認的二進制.blg格式之外,還可以保存爲其他多種格式,例如逗號分隔的文本文件(即CSV文件),甚至還可以保存到SQL Server表——這是Windows Server 2003和XP纔有的功能。如果選擇了SQL Server,還要指定一個SQL Server數據源和保存數據的表,雖然麻煩一點,不過如果要收集大量的性能數據並進行分析,SQL Server還是一種不錯的選擇



圖四

啓動日誌之後,可以看到日誌目錄中生成了一個65 KB的日誌文件。每次關閉和重新啓動日誌,都會生成一個新的日誌文件,文件名字中的序號依次增加。Win XP和2K支持一項非常實用的功能,即使在性能監視器工具不運行的時候,也能繼續將性能數據寫入日誌。如果是NT 4.0,則需要安裝NT 4.0 Resource Kit的DataLog服務才能使用這個無人值守日誌記錄功能。Win 2K和XP本身就有Performance Logs and Alerts服務,該服務在日誌會話啓動時自動啓動,日誌會話結束時自動停止。 Win 2K/XP性能日誌的另一個改進之處是保存日誌會話功能。在NT 4.0中,如果要爲某個日誌會話重新使用一組選定的性能對象和計數器,必須爲每一臺想要監視的服務器重新創建工作臺文件,如果要將一組日誌配置分別在多臺服務器上本地運行,必須重複執行繁瑣的配置操作。但在Win 2K/XP中,所有配置文件(包括日誌和警報)都以HTML文件的形式保存,很容易修改和重用。要保存一個日誌會話配置,只要在MMC窗口中右擊會話,然後選擇菜單“將設置另存爲”即可。

四、命令行工具

XP提供了一個叫做Logman的新工具,它不僅能夠在命令行上啓動和停止日誌會話,而且能夠從命令行創建新的日誌會話。 例如,下面的第一Logman命令新建了一個iislogging會話,日誌文件保存在默認c:/perflogs/IISLogging.blg,日誌中加入了本地服務器上inetinfo.exe進程的Process/% Processor Time計數器,收集性能數據的時間間隔是15分鐘。第二個命令啓動了iislogging日誌會話。運行這些命令之後,如果啓動MMC性能監視工具,可以看到計數器日誌中已經列出了剛纔創建的日誌會話。
logman create counter iislogging -c "/Process(inetinfo)/% Processor Time" -si 15:00
logman start iislogging

用Logman的-s選項可以啓動遠程機器上的日誌,使用形式類如“-s //ServerName”。使用該選項時,Logman啓動的日誌將在遠程服務器上運行,而不是執行Logman命令的本地機器。

五、WMIC

 WMIC即Windows管理規範的命令行工具,在命令上執行執行wmic,即可啓動WMIC環境。第一次執行wmic命令時,WMIC首先把自己安裝到WMI名稱空間。雖然微軟推出WMIC的意圖是簡化WMI的使用,不過WMIC的命令行語法還是顯得比較複雜。WMIC依靠別名來描述經常要訪問的WMI類,例如,WMIC的別名pagefile相當於WMI查詢Select * from Win32_PageFileUsage,如果在wmic提示符下輸入pagefile命令,WMIC將顯示出當前的頁面文件使用情況。 遺憾的是,WMIC沒有爲基於WMI的性能監視數據提供別名,所以要查詢性能監視器數據,必須直接調用相應的WMI類。例如,如果要查看服務器當前的物理內存使用情況,可以在WMIC命令行上執行path win32_perfformatteddata_perfos_memory,該命令要求WMIC返回WMI類win32_perfformatteddata_perfos_memory的數據,輸出結果包含了指定WMI內存對象的每一個屬性。如果只想查看Available Bytes屬性,可以將命令改爲path win32_perfformatteddata_perfos_memory get AvailableBytes。 另外,WMIC命令還可以從Windows命令行直接執行,例如,要查看Available Bytes,可以執行wmic path win32_perfformatteddata_perfos_memory get AvailableBytes命令,如果要返回多個屬性值,只要依次列出各個屬性,屬性之間用逗號分隔,例如“AvailableBytes,AvailableMBytes,CacheBytes”。 那麼,如何獲得各種性能監視器計數器的WMI類名稱呢?最好的辦法是使用WMI Tools。WMI Tools是微軟提供的一個免費工具,可以從http://www.microsoft.com/downloads/details.aspx?displaylang=en&familyid=6430F853-1120-48DB-8CC5-F2ABDC3ED314下載,如圖五所示,它能夠清楚地顯示出各個類的名稱、屬性、方法。



圖五

總而言之,在多層應用環境中,如果要查找性能瓶頸的具體位置,性能監視數據無疑是極其寶貴的依據,只要充分運用Win 2K/XP提供的性能工具,我們可以構造出功能豐富的性能管理系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章