Windows 系統管理

為您的伺服器把脈

Steven Choy

 

綜覽:

  • 自訂效能監視器
  • 關於測量內容與測量頻率的指導方針
  • 重要計數器的概觀以及要尋找什麼資訊

目錄

讓結果一目瞭然
測量的內容與時機
硬碟瓶頸
記憶體瓶頸
處理器瓶頸
網路瓶頸
處理序瓶頸
總結

如果星期一一早剛到辦公室,就碰到一位使用者在那裡等著,氣急敗壞的抱怨伺服器慢得跟老牛拉車一樣。這時候您該怎麼幫他呢?效能

監視器 (內建在 Windows® 的工具,相當好用) 可以幫助您診斷問題。

您可以在命令提示字元輸入 perfmon,或者從 [系統管理工具] 功能表,選取 [效能] 或 [可靠性],然後選取 [效能監視器] (在 Windows Vista® 和 Windows Server® 2008),來存取效能監視器。如果要加入效能計數器以及您要監視的物件,只要按一下加號,然後從許多選項當中選擇即可。

那麼,您該如何為伺服器把脈呢?伺服器有超過 60 個基本效能物件,每一個物件都含有多個計數器。我將在本文討論揭示伺服器重大徵兆的計數器,同時也將說明 Microsoft® 服務支援工程師在排解效能相關問題時最常用的標準取樣間隔。

當然,排解疑難時,基準線也是非常重要的參考點。由於伺服器負載得視商務需求而定,有時候也會隨著商務週期改變,因此每隔一個指定時段,就要根據標準工作負載建立一個基準線。這樣不但可以觀察變化的情況,也可以找出它的趨勢。

讓結果一目瞭然

在分析代表伺服器重大徵兆的計數器之前,先告訴您兩個竅門,更方便您使用效能監視器來測量伺服器的重大徵兆。附帶一提,雖然 Windows Vista 和 Windows Server 2008 用不著,不過如果您是在舊版 Window 上執行效能監視器的話,這兩個竅門還是派得上用場。

首先,您可以移除所有令人分心的取樣雜訊,這些取樣雜訊會混淆趨勢線的圖形檢視。在 Windows Vista 和 Windows Server 2008 中,效能監視器在圖形檢視中可以顯示多達 1000 個資料點,但是在舊版的 Windows 上,最多只能顯示 100 個,一旦超過 100 個資料點,效能監視器就會把這些資料點放在「值區」內。值區是以一條垂直線表示,指出值區內含的取樣點最小值、平均值以及最大值。

您可以從 [圖 1] 所示的圖形看出,同時顯示這麼多資料,很難看出趨勢線。而 [圖 2] 的圖形則顯示,當您把所有不相干的視覺資訊全部關閉之後,要掌握資料就容易多了。有關如何關閉這些垂直線的詳細資訊,請參閱知識庫文章 ( support.microsoft.com/kb/283110)。

fig01.gif

[圖 1]與令人分心的值區同時顯示的效能資料,並沒有用逗號加以區隔(按一下以放大影像)

fig02.gif

[圖 2]以逗號加以區隔的資料檢視較為清楚明確(按一下以放大影像)

第二個竅門是在數字當中加入逗號加以區隔,讓計數器所顯示的數值更容易分辨。Windows Vista 和 Windows Server 2008 預設都有啟用逗號,但是舊版 Windows 的效能監視器就沒有。

也許在您聽來沒什麼不同,可是只要看看 [圖 1] 當中沒有逗號的效能計數器,再看看 [圖 2] 當中有逗號的計數器,馬上就發現後者更清晰易懂。如需在 Windows XP 效能計數器加入逗號分隔字元的簡明指示,請參閱知識庫文章 (support.microsoft.com/kb/300884)。

測量的內容和時機

當資源到達容量上限時,就會產生瓶頸,使整個系統的效能降低。瓶頸通常是因為資源不足或配置不當、元件無法正常運作,以及程式要求資源不當所致。

會產生瓶頸而影響伺服器效能的資源區域主要有五個:實體磁碟、記憶體、處理序、CPU 和網路。如果上述任何一項資源使用過度,伺服器或應用程式就可能明顯變慢,或甚至當機。接下來我會一一解說每一個區域,針對您應該使用的計數器給予指引,並提供建議閾值來為伺服器把脈。

由於取樣間隔對於記錄檔和伺服器負載的大小有明顯的影響,因此最好能夠根據平均耗用時間來設定問題發生的取樣間隔,建立基準線,以避免問題再次發生。這樣可以幫助您找出導致問題的趨勢走向。

不消 15 分鐘的時間,就可以提供一個不賴的視窗,在進行一般作業時用來建立基準線。如果發生問題的平均耗用時間是四小時左右,請將取樣間隔設為 15 秒。如果發生問題的取樣間隔時間是八小時或八小時以上,取樣間隔就不要短於 5 分鐘;否則,最後記錄檔會變得巨大無比,而很難分析資料。

硬碟瓶頸

由於磁碟系統會儲存和處理伺服器的程式與資料,因此影響磁碟速度和使用情形的瓶頸,勢必會使伺服器的整體效能大打折扣。

請注意,如果伺服器尚未啟用磁碟物件,必須使用命令列工具 Diskperf 來啟用它們。另外還有一點,% Disk Time 可能會超過 100%,因此我比較喜歡使用 % Idle Time、Avg. Disk sec/Read 和 Avg. Disk sec/write 讓我更準確的瞭解硬碟的忙碌程度。您可以在知識庫文章 (support.microsoft.com/kb/310067) 找到更多關於 % Disk Time 的資訊。

下面是 Microsoft 服務支援工程師在監視磁碟所用的計數器。

LogicalDisk\% Free Space 它會測量所選邏輯磁碟機上的可用空間百分比。如果此值低於 15%,就要注意了,因為這表示儲存重要檔案的作業系統可用空間快要用完了。解決方法很簡單,就是增加磁碟空間。

PhysicalDisk\% Idle Time 它會測量在取樣間隔期間,磁碟閒置時間的百分比。如果這個計數器低於 20%,就表示磁碟系統已達飽和狀態。您可以考慮把目前的磁碟系統換成速度較快的磁碟系統。

PhysicalDisk\Avg.Disk Sec/Read 它會測量從磁碟讀取資料的平均時間 (以秒為單位)。如果此值大於 25 毫秒 (ms),就表示磁碟系統從磁碟機讀取的速度有所延遲。如果是掌控 SQL Server® 和 Exchange Server 的重要伺服器,則能夠接受的閾值就更遠低於此,大約 10 毫秒左右。最符合邏輯的解決方案,是把磁碟系統換成速度更快的磁碟系統。

PhysicalDisk\Avg.Disk Sec/Write 它會測量將資料寫入磁碟的平均時間 (以秒為單位)。如果此值大於 25 毫秒,就表示磁碟系統寫入磁碟的速度有所延遲。如果是掌控 SQL Server 和 Exchange Server 的重要伺服器,則能夠接受的閾值就更遠低於此,大約 10 毫秒左右。最可能的解決方案,是把磁碟系統換成速度更快的磁碟系統。

PhysicalDisk\Avg.Disk Queue Length它會指出目前有多少個 I/O 作業正在等候使用磁碟機。如果此值大於磁針數再加上 2,就表示磁碟本身可能就是瓶頸所在。

Memory\Cache Bytes 它會指出檔案系統快取正在使用的記憶體量。如果此值大於 200MB,就表示可能發生磁碟瓶頸了。

記憶體瓶頸

記憶體不足通常是因為 RAM 不足、記憶體流失或是將記憶體參數置於 boot.ini 內。在探討記憶體計數器之前,我應該先討論 /3GB 參數。

記憶體越多,越能減少磁碟 I/O 活動,並且提升應用程式效能。/3GB 參數當初是在 Windows NT® 中引進,它的作用是為採用使用者模式的程式提供更多記憶體。

Windows 所用的虛擬位址空間有 4GB (這與系統擁有多少實體 RAM 無關)。根據預設,較低層的 2GB 是保留給採用使用者模式的程式,而較上層的 2GB 則是保留給採用核心模式的程式。若使用 /3GB 參數,則會提供 3GB 給使用者模式的處理序。當然,如此一來會佔用到核心記憶體,使它只剩 1GB 的虛擬位址空間。而這樣可能會產生問題,因為 Pool Non-Paged Byte、Pool Paged Byte、Free System Page Tables Entries 和桌面堆積全部都擠在 1GB 的空間當中。因此,/3GB 參數應該只在環境中經過徹底測試之後再使用。

如果您懷疑您遇到的瓶頸與記憶體有關,可以考量這一點。如果 /3GB 參數不是問題癥結所在,則可以使用這些計數器來診斷可能的記憶體瓶頸。

Memory\% Committed Bytes in Use它會測量已被認可的位元組數與認可限制之間的比例 — 換句話說,就是使用中的虛擬記憶體量。如果此值大於 80%,就表示記憶體不足。解決方法很簡單,就是增加記憶體。

Memory\% Available Mbytes它會測量執行處理序所能使用的實體記憶體量 (以 MB 為單位)。如果此值小於總實體 RAM 的 5%,就表示記憶體不足,可能會增加分頁活動。解決這個問題的方法很簡單,只要增加記憶體就行了。

Memory\Free System Page Table Entries 它會指出系統目前未在使用中的分頁表項目數。如果此值小於 5,000,就表示有記憶體流失的現象發生。

Memory\Pool Non-Paged Bytes 它會測量非分頁集區的大小 (以位元組為單位)。這是系統記憶體區域,專門容納無法寫入磁碟、而必須留在實體記憶體的物件 (只要有配置物件的話)。如果此值大於 175MB (若使用 /3GB 參數的話,則為 100MB ),就表示可能有記憶體流失的現象發生。這時候系統事件記錄檔會記錄一般事件識別碼 2019。

Memory\Pool Non-Paged Bytes 它會測量分頁集區的大小 (以位元組為單位)。這是系統記憶體區域,專門容納在不使用的時候可以寫入磁碟的物件。如果此值大於 250MB (若使用 /3GB 參數的話,則為 170MB ),就表示可能有記憶體流失的現象發生。這時候系統事件記錄檔會記錄一般事件識別碼 2020。

Memory\Pages per Second 它會測量從磁碟讀取網頁或者將網頁寫入磁碟以解決硬體分頁錯誤的速率。如果此值大於 1000 (因為過量分頁的關係),就表示可能有記憶體流失的現象發生。

處理器瓶頸

如果處理器體力透支,可能是因為處理器本身沒有提供足夠的電源,或者因為應用程式不足的關係。您必須再三檢查處理器是否耗費太多時間在分頁上面,而導致實體記憶體不足。下面是 Microsoft 服務支援工程師調查可能的處理器瓶頸所用的計數器。

Processor\% Processor Time它會測量處理器在執行非閒置執行緒時,已耗用時間的百分比。如果此百分比大於 85%,就表示處理器已經筋疲力盡,伺服器需要換一個速度較快的處理器。

Processor\% User Time 它會測量處理器在使用者模式所耗用時間的百分比。如果此值很高,表示伺服器正忙著處理應用程式。也許您可以把即將用完處理器資源的應用程式最佳化,來解決這個問題。

Processor\% Interrupt Time 它會測量處理器在特定的取樣間隔期間,花在接收和處理硬體中斷的時間。如果此值大於 15%,就表示這個計數器可能有硬體問題。

System\Processor Queue Length它會測量處理器佇列中的執行緒數目。如果此值大於延伸時段所用的 CPU 數目的兩倍,就表示伺服器沒有足夠的處理器電源。

網路瓶頸

網路瓶頸肯定會影響伺服器透過網路收送資料的能力。這可能是伺服器的網路卡問題,也可能是網路已經飽和,需要加以分段。您可以使用下列計數器來診斷可能的網路瓶頸。

Network Interface\Bytes Total/Sec 它會測量每一張網路介面卡收送位元組的速率 (包括結構字元在內)。如果您發現耗用的介面超過 70%,就表示網路已飽和。如果是 100-Mbps NIC,則耗用的介面是 8.7MB/秒 (100Mbps = 100000kbps = 12.5MB/秒* 70%)。碰到這種情形,可以安插一個較快的網路卡,或者將網路分段。

Network Interface\Output Queue Length 它會測量輸出封包佇列的長度 (以封包為單位)。如果此值大於 2,就表示網路已飽和。您可以安插一個較快的網路卡,或者將網路分段,來解決這個問題。

處理序瓶頸

如果您的處理序行為不當,或者沒有最佳化,就會使伺服器的效能大打折扣。執行緒和控制碼外洩最後會使伺服器當掉,而過度使用處理器,則會使伺服器變得如老牛拉車一樣慢。下面是診斷處理序相關瓶頸時不可或缺的計數器。

Process\Handle Count 它會測量處理序目前開啟的控制碼總數。如果此值大於 10,000,就表示可能有控制碼外洩的現象發生。

Process\Thread Count 它會測量處理序中目前有多少執行緒在作用中。如果此值介於執行緒數的上限和下限之間,並且大於 500,就表示可能有執行緒外洩的現象發生。

Process\Private Bytes它會指出這個處理序已經配置、而且不能與其他處理序共用的記憶體量。如果此值介於執行緒數的上限和下限之間,並且大於 250,就表示可能有記憶體流失的現象發生。

總結

現在您知道 Microsoft 服務支援工程師是使用哪些計數器來診斷各種瓶頸了。當然,您很有可能會找到自己最愛用、並針對您特定需求而量身打造的一組計數器。您一定希望每次需要監視伺服器時,都不必手動加入所有您最愛用的計數器。還好,效能監視器可讓您選擇將您所有的計數器儲存在範本中,供日後使用。

也許您還在納悶,應該在本機還是遠端執行效能監視器。而且在本機執行效能監視器時,對效能會有什麼衝擊?這全看您的環境而定。如果您將間隔至少設定為 5 分鐘,對伺服器效能的衝擊可說是微乎其微。

如果您知道伺服器上有效能問題,可能要選擇從本機執行效能監視器,因為伺服器上的資源要是耗盡,效能監視器可能無法從遠端電腦擷取資料。當您要監視或設定多部伺服器的基準線時,最適合的方法就是從中央電腦進行遠端執行。

Steven Choy 是 Microsoft 專業領域工程的資深專業領域工程師。他曾支援政府機構和商務客戶有關桌上型電腦部署與移轉、修補程式管理以及群組原則等專案。他目前致力於伺服器虛擬化與伺服器健康狀態的研究。

© 2008 Microsoft Corporation and CMP Media, LLC.著作權所有,並保留一切權利。未經許可,不得部分或全部重製。