CPU效能指標
1. 使用者進程使用CPU的比率
2. 系統進程使用CPU的比率
3. WIO, 等待I/O 而是CPU處於空閑狀態的比率。
4. CPU的空閑率
5. CPU用於上下文交換的比率
6,nice
7,real-time
8,運行進程隊列的長度
9,平均負載
Linux下常用監控CPU效能的工具有
1. iostat
只能查看所有CPU的平均資訊
2. vmstat
能查看所有CPU的平均資訊,
能查看CPU隊列資訊
3. mpstat
能查看單個和所有的CPU資訊。
4. sar
與mpstat類似
5. top
6. nmon
iostat
$ iostatLinux 2.6.18-92.el5 08/30/2012avg-cpu: %user %nice %system %iowait %steal %idle 1.16 0.01 0.62 0.18 0.00 98.03
vmstat
$ vmstat -n 5procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 96 1261196 981892 3638872 0 0 0 16 1 1 1 1 98 0 0
-n 5 參數的意義是每隔 5 秒重新整理一次
procs
r -- 下面的數字代表啟動並執行序列。如果這個值連續大於系統的CPU個數表示系統運行較慢, 有多數進程等待CPU。 如果r的個數大於CPU的4倍的話, 則系統面臨CPU短缺或是CPU的速率過低,造成系統運行過慢。
System
in -- 每秒產生的中斷次數
cs -- 每秒產生的環境切換次數。
這兩個值越大,系統進程消耗的CPU的時間越大。
CPU
us -- 使用者進程消耗CPU的時間百分比。長期居高不下, 就需要最佳化程式了。
sy -- 系統進程消耗CPU的時間百分比。 sy 值高, 並不是良性的表現。
wa -- IO等待消耗的CPU時間百分比, 值高時,說明IO等待比較嚴重, 可能由於磁碟大量隨機訪問造成, 也有可能磁碟出現瓶頸。
id -- CPU 處於空閑時間百分比。如果持續為0且出現sy 是us 兩倍狀況,則系統面臨CPU資源短缺。當發生此問題的時候請先調整應用程式對CPU的佔用情況.使得應用程式能夠更有效使用CPU.同時可以考慮增加更多的CPU.
mpstat - (Multiprocessor Statistics)
實施監控, 資訊存放在 /proc/stat檔案中
$ mpstat -P ALL 2 10Linux 2.6.18-92.el5 () 08/30/201208:16:34 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s08:16:36 PM all 0.78 0.00 0.26 0.26 0.00 0.26 0.00 98.44 1058.8508:16:36 PM 0 0.52 0.00 0.52 0.00 0.00 0.52 0.00 98.44 1058.8508:16:36 PM 1 0.52 0.00 0.00 0.00 0.00 0.00 0.00 99.48 0.00
以上意思是: 每隔2秒採樣所有CPU的使用狀況, 總過採樣10次。文法如下:
mpstat [-P {|ALL}] [internal [count]]
-P 監控哪個CPU, 一般使用ALL就可以了
Internal 間隔的時間
count 採樣的次數
輸出參數意義
%user -- 使用者態CPU時間比
%nice -- 負進程的CPU時間
%system - 核心態時間
iowait -- IO 等待時間
irq --
soft
idle
intr/s 每秒CPU接收中斷的次數
sar
$ sar -u 2 10Linux 2.6.18-92.el5 () 08/30/201208:28:36 PM CPU %user %nice %system %iowait %steal %idle08:28:38 PM all 0.26 0.00 0.00 0.78 0.00 98.9708:28:40 PM all 0.52 0.00 0.52 0.00 0.00 98.97
sar [options] [-A] [-o file] t [n]
在命令列中,n 和t 兩個參數組合起來定義採樣間隔和次數,t為採樣間隔,是必須有
的參數,n為採樣次數,是可選的,預設值是1,-o file表示將命令結果以二進位格式
存放在檔案中,file 在此處不是關鍵字,是檔案名稱。options 為命令列選項,sar命令
的選項很多,下面只列出常用選項:
-A:所有報告的總和。
-u:CPU利用率
-v:進程、I節點、檔案和鎖表狀態。
-d:硬碟使用報告。
-r:記憶體和交換空間的使用統計。
-g:串口I/O的情況。
-b:緩衝區使用方式。
-a:檔案讀寫情況。
-c:系統調用情況。
-q:報告隊列長度和系統平均負載
-R:進程的活動情況。
-y:終端裝置活動情況。
-w:系統交換活動。
-x { pid | SELF | ALL }:報告指定進程ID的統計資訊,SELF關鍵字是sar進程本身的統計,ALL關鍵字是所有系統進程的統計
%user:CPU處在使用者模式下的時間百分比。
%nice:CPU處在帶NICE值的使用者模式下的時間百分比。
%system:CPU處在系統模式下的時間百分比。
%iowait:CPU等待輸入輸出完成時間的百分比。
%steal:管理程式維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比。
%idle:CPU空閑時間百分比。
在所有的顯示中,我們應主要注意%iowait和%idle,%iowait的值過高,表示硬碟存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統響應慢時,有可能是CPU等待分配記憶體,此時應加大記憶體容量。%idle值如果持續低於10,那麼系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU。
用sar進行運行進程隊列長度分析:
#sar -q 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
07:58:14 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
07:58:16 PM 0 493 0.64 0.56 0.49
07:58:18 PM 1 491 0.64 0.56 0.49
07:58:20 PM 1 488 0.59 0.55 0.49
07:58:22 PM 0 487 0.59 0.55 0.49
07:58:24 PM 0 485 0.59 0.55 0.49
07:58:26 PM 1 483 0.78 0.59 0.50
07:58:28 PM 0 481 0.78 0.59 0.50
07:58:30 PM 1 480 0.72 0.58 0.50
07:58:32 PM 0 477 0.72 0.58 0.50
07:58:34 PM 0 474 0.72 0.58 0.50
Average: 0 484 0.68 0.57 0.49
runq-sz 準備啟動並執行進程運行隊列。
plist-sz 進程隊列裡的進程和線程的數量
ldavg-1 前一分鐘的系統平均負載(load average)
ldavg-5 前五分鐘的系統平均負載(load average)
ldavg-15 前15分鐘的系統平均負載(load average)
順便說一下load avarage的含義
load average可以理解為每秒鐘CPU等待啟動並執行進程個數.
在Linux系統中,sar -q、uptime、w、top等命令都會有系統平均負載load average的輸出,那麼什麼是系統平均負載呢。
系統平均負載被定義為在特定時間間隔內運行隊列中的平均任務數。如果一個進程滿足以下條件則其就會位於運行隊列中:
- 它沒有在等待I/O操作的結果
- 它沒有主動進入等待狀態(也就是沒有調用'wait')
- 沒有被停止(例如:等待終止)
例如:
# uptime
20:55:40 up 24 days, 3:06, 1 user, load average: 8.13, 5.90, 4.94
命令輸出的最後內容表示在過去的1、5、15分鐘內運行隊列中的平均進程數量。
一般來說只要每個CPU的當前活動進程數不大於3那麼系統的效能就是良好的,如果每個CPU的任務數大於5,那麼就表示這台機器的效能有嚴重問題。對 於上面的例子來說,假設系統有兩個CPU,那麼其每個CPU的當前任務數為:8.13/2=4.065。這表示該系統的效能是可以接受的。