分析CPU消耗,講白點,就是分析CPU的使用率,包括總的CPU使用率,每個CPU核的使用率和每個程序的CPU使用率。懂得這三種使用率的查詢和分析,這一塊就算搞定了。
一、總的CPU使用率
1、查詢指令
vmstat 2、指令格式 vmstat 1 10 (每隔一秒顯示一次系統的運作狀況,共顯示10次) 3、資料來源 /proc/stat 4、指令含義 vmstat指令用來獲得UNIX系統有關程序、虛存、頁面交換空間及CPU活動的資訊。這些資訊反映了系統的負載情況。vmstat首次運作時顯示自系統啟動開始的各項統計資訊,之後運作vmstat将顯示自上次運作該指令以後的統計資訊。使用者可以通過指定統計的次數和時間來獲得所需的統計資訊。 (vmstat第一條結果是從系統開始到現在的平均值,不是實時的值。以後的每個結果也是統計時間内的平均值,而不是實時值。) 5、字段含義
上圖紅色方框即是CPU各項名額的使用率情況。 us :在指定時間間隔内CPU在使用者态的使用率,即使用者程序消耗的CPU時間百分比。(=user+nice) us 列顯示了使用者方式下所花費 CPU 時間的百分比。us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期大于 50%,需要考慮優化使用者的程式,比如算法等。 sy :在指定時間間隔内CPU在核心态的使用率,即核心程序消耗的CPU時間百分比。(=system+irq+soft) sy 列顯示了核心程序所花費的cpu時間的百分比。sy的值高時,說明系統核心消耗的CPU資源多。us+sy的參考值為<= 80%,如果us+sy 大于80%說明可能存在CPU資源不足。 id :在指定時間間隔内CPU空閑時間比,即CPU處于空閑狀态時間百分比。(=idle, 不包括等待I/O) id 列顯示了cpu處在空閑狀态的時間百分比。 wa :在指定時間間隔内CPU因為等待I/O而空閑的時間比,即IO等待消耗的CPU時間百分比。 wa 列顯示了IO等待所占用的CPU時間的百分比。這裡wa的參考值為 30%,如果wa超過30%,說明IO等待嚴重,這可能是磁盤大量随機通路造成的,也可能磁盤或者磁盤通路控制器的帶寬瓶頸造成的(主要是塊操作)。 6、其他補充 這裡user, irq, soft,idle是接下來要講的指令 mpstat 的名額;nice名額請參考另一篇博文《程序優先級,程序nice值和%nice的解釋》。 7、情景分析 如果CPU的sy和us值相加的百分比接近100%,或者運作隊列(r) 中等待的程序數(b) 總是不等于 0,則該系統受限于CPU。 vmstat的輸出哪些資訊值得關注?
--proc r:運作的程序比較多,系統很繁忙
--IO bo:磁盤寫的資料量稍大,如果大檔案的寫,10以内基本不用擔心,如果是小檔案2M以前基本正常
--CPU us:持續大于50,服務高峰期可以接受
--CPU wa:稍微有些同
--CPU id:持續小于50,服務高峰期可以接受 二、每個CPU核的使用率 1、查詢指令 mpstat 2、指令格式 mpstat [-P {|ALL}] [interval [count]] 參數的含義如下: 參數 解釋 -P {|ALL} 表示監控哪個CPU, cpu在[0,cpu個數-1]中取值 interval 相鄰的兩次采樣的間隔時間 count 采樣的次數,count隻能和delay一起使用 當沒有參數時,mpstat顯示自系統啟動以後所有資訊的平均值。有interval時,第一次輸出的資訊顯示自系統啟動以來的平均資訊,從第二次開始,輸出為前一個interval時間段的平均資訊。 3、資料來源 /proc/stat 4、指令含義 mpstat是MultiProcessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計資訊,這些資訊存放在/proc/stat檔案中。在多CPUs系統裡,其不但能檢視所有CPU的平均狀況資訊,而且能夠檢視特定CPU的資訊。 5、字段含義 [[email protected] linux-2.6.14]$ mpstat Linux 2.6.16.21-0.8-default (liyawei) 05/31/07 10:23:03 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 10:23:05 all 0.50 0.00 0.00 1.99 0.00 0.00 0.00 97.51 271.64 CPU:處理器ID。 user:在interval時間段裡,使用者态的CPU時間(%),不包含nice值為負的程序。 nice:詳見另一篇博文《程序優先級,程序nice值和%nice的解釋》,此略。 sys :在interval時間段裡,核心态的CPU時間(%),比如程序的建立/切換、互斥鎖等CPU開銷。 iowait:在interval時間段裡,硬碟IO等待時間(%)。 irq :在interval時間段裡,硬中斷時間(%)。 soft:在interval時間段裡,軟中斷時間(%)。 idle:在interval時間段裡,CPU除去等待磁盤IO操作外的因為任何原因而空閑的閑置時間(%)。 intr/s:在interval時間段裡,每秒CPU接收的中斷的次數。 6、示例 範例1:mpstat不帶參數,輸出為從系統啟動以來的平均值。 [[email protected] linux-2.6.14]$ mpstat Linux 2.6.9-5.31AXsmp (builder.redflag-linux.com) 12/16/2005 09:38:46 AM CPU %user %nice %system %iowait %irq %soft %idle intr/s 09:38:48 AM all 23.28 0.00 1.75 0.50 0.00 0.00 74.47 1018.59 範例2:每2秒産生所有處理器的統計資料報告,一共産生三個interval 的資訊。 [[email protected] yum_dir]# mpstat -P ALL 2 3 Linux 2.6.18-164.el5 (server.sys.com) 01/04/2010 09:34:20 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (從系統啟動以來的平均資訊) 09:34:22 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49 09:34:22 PM 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 99.50 1001.00 09:34:22 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 09:34:22 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (前2秒的平均資訊) 09:34:24 PM all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 99.75 1005.00 09:34:24 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1005.50 09:34:24 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 09:34:24 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (前2秒的平均資訊) 09:34:26 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.49 09:34:26 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1001.00 09:34:26 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 Average: CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s (三個interval的平均資訊) Average: all 0.00 0.00 0.08 0.00 0.00 0.00 0.00 99.92 1002.66 Average: 0 0.00 0.00 0.17 0.00 0.00 0.00 0.00 99.83 1002.49 Average: 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 三、每個程序的CPU使用率 1、查詢指令 pidstat 2、指令格式 pidstat [-p <PID>] [interval [count]] 針對同一PID,當沒有參數時,pidstat顯示自系統啟動以後的資訊的平均值;有interval時,第一次輸出的資訊顯示自系統啟動以來的平均資訊,從第二次開始,輸出為前一個interval時間段的平均資訊。 3、資料來源 /proc/stat 4、示例 範例1:pidstat不帶參數,輸出為從系統啟動以來的平均值。
範例2:每隔2秒,顯示5次,所有 活動程序的CPU使用情況(注意,僅顯示活動程序CPU資訊)。
範例3:每隔2秒,顯示5次,PID為2190的程序的CPU使用情況顯示。
(全文完)