2.4. 監控何種資源?
剛剛我們提到,每台電腦的資源包括了 CPU 的處理能力、頻寬、記憶體、以及儲存空間等。乍看之下,只要監控這四種東西即可。
但不幸的是,事情沒那麼簡單。舉磁碟為例,您想要知道硬碟哪一方面的效能呢?
還剩下多少剩餘空間?
硬碟平均每秒處理多少個 I/O 需求?
硬碟處理每個 I/O 的平均時間為何?
這些 I/O 中,有多少是讀取?有多少是寫入?
每個 I/O 讀取 / 寫入的平均資料量為何?
2.4. 監控何種資源?
剛剛我們提到,每台電腦的資源包括了 CPU 的處理能力、頻寬、記憶體、以及儲存空間等。乍看之下,只要監控這四種東西即可。
但不幸的是,事情沒那麼簡單。舉磁碟為例,您想要知道硬碟哪一方面的效能呢?
還剩下多少剩餘空間?
硬碟平均每秒處理多少個 I/O 需求?
硬碟處理每個 I/O 的平均時間為何?
這些 I/O 中,有多少是讀取?有多少是寫入?
每個 I/O 讀取 / 寫入的平均資料量為何?
鑽研硬碟效能是門大學問;以上只不過是皮毛而已。最重要的概念是,每種資源都有許許多多的資料可供蒐集。
以下章節將探討每種主要資源的使用資訊。
2.4.1. 監控處理器的能力
通常監控處理器能力再簡單不過:看看 CPU 使用率是不是曾經高達 100% 即可。如果 CPU 使用率低於 100%,那麼不管系統正在做什麼事情,總有餘裕從事其他工作。
然而,很少有哪台電腦會達不到 100% CPU 使用率的。從這角度來看,就得仔細看看處理器使用率的詳細資料。如此一來,您就可以得知哪些工作耗去大部分的處理器資源。以下是幾個系統管理者比較常監控的項目:
使用者與系統
使用者等級與系統等級的處理程序所耗去的處理器資源,可以指出系統的負荷主要來自應用程式,或是作業系統。如果使用者處理程序的數據比較高,那是好事(如果使用者還沒有對效能提出抱怨的話);相反地,如果系統處理程序的數據偏高,那就需要進一步研究了。
環境切換
當 CPU 停止執行某個程序,轉而執行另一個程序時,稱之為環境切換(context switch,又稱內容切換)。因為每次環境切換時,作業系統都得取得 CPU 的控制權,因此過度頻繁的切換與系統等級的程序消耗大量 CPU 資源,兩者多半是相輔而生的。
中斷
正如這名稱所暗示的,中斷指得是 CPU 在處理一件事情的中途,硬生生地被打斷。中斷多半來自於為硬體(例如 I/O 裝置完成了 I/O 動作)或軟體(例如控制應用程式的軟體中斷)活動。因為中斷必須在系統等級上才能執行,因此高中斷率會導致系統等級的程序耗去更多 CPU 資源。
可執行的程序
程序可能屬於多種不同的狀態。舉例來說,可能是:
等待 I/O 運作結束
等待記憶體管理子系統處理分頁錯誤(page fault)
在這些情形下,程序都不需要用到 CPU 資源。
然而,程序的狀態會隨著時間而改變,成為可執行的程序。正如這名稱所暗示的,可執行程序只要等到 CPU 資源,就可以把工作完成。然而,如果同一時間內有多個可執行程序存在,那麼其中只有一個[1]可以取得 CPU 資源,其他的都得排隊等待。您只要監控可執行程序的數目,就可以知道 CPU 忙碌的程度為何。
要深入了解 CPU 使用率,還得監控作業系統其他服務項目的資料,包括記憶體管理、I/O 處理等等。當您監控系統效能時,您會發現這些數據都有連帶關係。換句話說,CPU 使用率過高可能是因為 I/O 子系統出了問題;記憶體的統計資料可能顯示應用程式設計有誤。
因此,當您監控系統效能時,不能只看其中一兩項資訊;唯有全盤的觀點,才有可能從任何系統數據的蛛絲馬跡中,找出有用的資訊。
2.4.2. 監控頻寬
在本章描述的所有資源中,頻寬可能是最難監控的項目。這原因是效能數據多半與裝置有關,而頻寬最吃緊的地方在於連接裝置的匯流排上。如果有多種裝置共享一個匯流排,您或許可以發現每個裝置的數據都在合理範圍內;但匯流排的整體負荷,卻遠高於所有裝置的加總。
另一個監控頻寬的挑戰來自環境:您無法從裝置那兒得到任何數據;這尤其出現在系統延伸匯流排與資料路徑(datapath)[2]上。然而,即使很難蒐集到 100% 準確的頻寬數據,您還是有足夠的資訊來做某種程度的分析,尤其是把相關數據一併納入考量之後。
常見的頻寬數據有:
接收 / 傳送的位元組數目
網路介面卡的數據提供了一或多個匯流排 — 也就是網路 — 的頻寬使用率。
介面的累積數據與比率
網路相關的數據能提供過多的網路碰撞(collision)、接收與傳送錯誤等等方面的指示。藉由這些數據(尤其是來自網路上多部電腦的數據),您就可以在使用常見的網路診斷工具前,先做一點網路障礙排除的工作。
每秒的傳輸量
通常我們會為區塊 I/O 類的裝置蒐集這類數據,例如磁碟機或高效能的磁帶機。要知道這些裝置的頻寬使用率是否接近極限,就可以使用這些數據。由於磁碟與磁帶機的電磁本質,所以每秒能處理的 I/O 有限;當達到極限後,效能就會大幅衰退。
2.4.3. 監控記憶體
如果要知道哪裡可以找到最多的效能數據,那肯定是監控記憶體使用率這塊範疇。由於目前作業系統對虛擬記憶體分頁的需求非常強,天生就具有非常高的複雜性,因此記憶體使用率的數據不但繁多,而且多樣化。這也是系統管理者在做資源管理時,著墨最多的地方。
底下大略列出一些常見的記憶體管理數據:
分頁進 / 出
這數據能讓您知道從系統記憶體到儲存裝置(多半是硬碟)的分頁流動數目。如果這兩項指數都偏高,表示系統記憶體不足,不斷地 thrashing(猛移;崩潰);或把大部分系統資源花在把分頁從記憶體移入移出,而非執行應用程式上。
動作中 / 非動作中的分頁
這兩個數據顯示存在於記憶體中的分頁使用量有多大。如果缺少非動作中的分頁,那表示實體記憶體不足。
可用的、共享的、置入緩衝區的、與置入快取的分頁數目
跟動作中 / 非動作中的分頁資料比起來,這些數據提供了更詳盡的資料。您可以藉由這些數據找出記憶體使用率的綜合數據。
Swap 的進 / 出數目
這些數據顯示系統的整體 swap 執行數目,數字愈高表示實體記憶體不足。
要能成功地監控記憶體使用率,需要對作業系統的虛擬記憶體分頁需求有非常好的了解。這主題多到可以寫成一本書,所以我們只在第4章與您分享一些基本概念。本章討論的是系統監控,所以只提供粗淺的基礎知識。
2.4.4. 監控儲存空間
正常來說,監控儲存空間有兩個不同的等級:
看看是不是有足夠的磁碟空間
看看是不是有儲存方面的效能問題
這樣分類的原因是其中一項出了大問題,卻不會對另一項造成任何影響。例如硬碟可能空間不足,卻不會引起任何效能上的問題;反之,硬碟可能還有 99% 的剩餘空間,卻已經達到了效能極限。
不過平均來說,系統比較常遇到兩者同時短缺的情形。也因此 — 就某種程度而言 — 其中一個出了問題,就會影響另一個。最常見的情形是磁碟空間趨近於 0% 時,I/O 效能會愈來愈差;而 I/O 負載過高時,I/O 的吞吐量就會低到讓應用程式無法正常運行。
但不管是什麼樣的情況,以下數據都對監控儲存裝置非常有用:
剩餘空間
剩餘空間大概是系統管理者緊盯不放的項目;很少有哪個管理者從來不檢查(或不使用某些自動機制來監控)剩餘空間的。
檔案系統的相關數據
跟剩餘空間比起來,這些數據(例如檔案 / 目錄的數量、平均檔案大小等等)提供了更細膩的資訊。也因此,這些數據能讓系統管理者將系統調整為最佳狀態,因為裝滿小檔案的檔案系統,跟裝了一個大檔案的檔案系統,兩者的 I/O 負載是截然不同的。
每秒的傳輸量
您可以藉由這數據,得知某個裝置的頻寬是否達到了極峰值。
每秒的讀 / 寫數目
把每秒的傳輸量拆開,您就會得到這兩個數據,它們能讓系統管理者更了解某個儲存裝置的 I/O 負荷之本質為何。這項資訊非常重要,因為有些儲存技術的讀與寫,有著完全不同的效能特質。
注
[1]
假設您使用的是單處理器的電腦。
[2]
第3章包括了更多有關匯流排、資料路徑、以及頻寬方面的資訊。