衡量CPU性能的指標:linux
1,用戶使用CPU的狀況;
CPU運行常規用戶進程
CPU運行niced process
CPU運行實時進程ios
2,系統使用CPU狀況;
用於I/O管理:中斷和驅動
用於內存管理:頁面交換
用戶進程管理:進程開始和上下文切換算法
3,WIO:用於進程等待磁盤I/O而使CPU處於空閒狀態的比率。數組
4,CPU的空閒率,除了上面的WIO之外的空閒時間dom
5,CPU用於上下文交換的比率ide
6,nice工具
7,real-timepost
8,運行進程隊列的長度性能
9,平均負載優化
Linux中經常使用的監控CPU總體性能的工具備:
§ mpstat: mpstat 不但能查看全部CPU的平均信息,還能查看指定CPU的信息。
§ vmstat:只能查看全部CPU的平均信息;查看cpu隊列信息;
§ iostat: 只能查看全部CPU的平均信息。
§ sar: 與mpstat 同樣,不但能查看CPU的平均信息,還能查看指定CPU的信息。
§ top:顯示的信息同ps接近,可是top能夠了解到CPU消耗,能夠根據用戶指定的時間來更新顯示。
下面一一介紹:
一,vmstat
[root@localhost ~]#vmstat -n 3 (每一個3秒刷新一次)
procs-----------memory--------------------swap-- ----io---- --system---- ------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa
10 144 186164 105252 2386848 0 0 18 166 83 2 48 21 31 0
20 144 189620 105252 2386848 0 0 0 177 1039 1210 34 10 56 0
00 144 214324 105252 2386848 0 0 0 10 1071 670 32 5 63 0
00 144 202212 105252 2386848 0 0 0 189 1035 558 20 3 77 0
20 144 158772 105252 2386848 0 0 0 203 1065 2832 70 14 15 0
紅色內容標示CPU相關的參數
PROC(ESSES)
--r:若是在processes中運行的序列(process r)是連續的大於在系統中的CPU的個數表示系統如今運行比較慢,有多數的進程等待CPU.
若是r的輸出數大於系統中可用CPU個數的4倍的話,則系統面臨着CPU短缺的問題,或者是CPU的速率太低,系統中有多數的進程在等待CPU,形成系統中進程運行過慢.
SYSTEM
--in:每秒產生的中斷次數
--cs:每秒產生的上下文切換次數
上面2個值越大,會看到由內核消耗的CPU時間會越大
CPU
-us:用戶進程消耗的CPU時間百分
us的值比較高時,說明用戶進程消耗的CPU時間多,可是若是長期超50%的使用,那麼咱們就該考慮優化程序算法或者進行加速(好比PHP/PERL)
-sy:內核進程消耗的CPU時間百分比(sy的值高時,說明系統內核消耗的CPU資源多,這並非良性表現,咱們應該檢查緣由)
-wa:IO等待消耗的CPU時間百分比
wa的值高時,說明IO等待比較嚴重,這可能因爲磁盤大量做隨機訪問形成,也有可能磁盤出現瓶頸(塊操做)。
-id:CPU處於空閒狀態時間百分比,若是空閒時間(cpu id)持續爲0而且系統時間(cpu sy)是用戶時間的兩倍(cpu us) 系統則面臨着CPU資源的短缺.
解決辦法:
當發生以上問題的時候請先調整應用程序對CPU的佔用狀況.使得應用程序可以更有效的使用CPU.同時能夠考慮增長更多的 CPU. 關於CPU的使用狀況還能夠結合mpstat, ps aux top prstat –a等等一些相應的命令來綜合考慮關於具體的CPU的使用狀況,和那些進程在佔用大量的CPU時間.通常狀況下,應用程序的問題會比較大一些.好比一些 SQL語句不合理等等都會形成這樣的現象.
二,sar
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關鍵字是全部系統進程的統計。
用sar進行CPU利用率的分析
#sar -u 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
07:40:17 PM CPU %user %nice %system %iowait %steal %idle
07:40:19 PM all 12.44 0.00 6.97 1.74 0.00 78.86
07:40:21 PM all 26.75 0.00 12.50 16.00 0.00 44.75
07:40:23 PM all 16.96 0.00 7.98 0.00 0.00 75.06
07:40:25 PM all 22.50 0.00 7.00 3.25 0.00 67.25
07:40:27 PM all 7.25 0.00 2.75 2.50 0.00 87.50
07:40:29 PM all 20.05 0.00 8.56 2.93 0.00 68.46
07:40:31 PM all 13.97 0.00 6.23 3.49 0.00 76.31
07:40:33 PM all 8.25 0.00 0.75 3.50 0.00 87.50
07:40:35 PM all 13.25 0.00 5.75 4.00 0.00 77.00
07:40:37 PM all 10.03 0.00 0.50 2.51 0.00 86.97
Average: all 15.15 0.00 5.91 3.99 0.00 74.95
在顯示內容包括:
%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
命令輸出的最後內容表示在過去的一、五、15分鐘內運行隊列中的平均進程數量。
通常來講只要每一個CPU的當前活動進程數不大於3那麼系統的性能就是良好的,若是每一個CPU的任務數大於5,那麼就表示這臺機器的性能有嚴重問題。對 於上面的例子來講,假設系統有兩個CPU,那麼其每一個CPU的當前任務數爲:8.13/2=4.065。這表示該系統的性能是能夠接受的。
三,iostat
#iostat -c 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
avg-cpu: %user %nice %system %iowait %steal %idle
30.10 0.00 4.89 5.63 0.00 59.38
avg-cpu: %user %nice %system %iowait %steal %idle
8.46 0.00 1.74 0.25 0.00 89.55
avg-cpu: %user %nice %system %iowait %steal %idle
22.06 0.00 11.28 1.25 0.00 65.41
四,mpstat
mpstat 是Multiprocessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPUs系統裏,其不 但能查看全部CPU的平均情況信息,並且可以查看特定CPU的信息。下面只介紹 mpstat與CPU相關的參數,mpstat的語法以下:
mpstat [-P {|ALL}] [internal [count]]
參數的含義以下:
參數 解釋
-P {|ALL} 表示監控哪一個CPU, cpu在[0,cpu個數-1]中取值
internal 相鄰的兩次採樣的間隔時間
count 採樣的次數,count只能和delay一塊兒使用
當沒有參數時,mpstat則顯示系統啓動之後全部信息的平均值。有interval時,第一行的信息自系統啓動以來的平均信息。從第二行開始,輸出爲前一個interval時間段的平均信息。與CPU有關的輸出的含義以下:
參數 解釋 從/proc/stat得到數據
CPU 處理器ID
user 在internal時間段裏,用戶態的CPU時間(%) ,不包含 nice值爲負 進程 dusr/dtotal*100
nice 在internal時間段裏,nice值爲負進程的CPU時間(%) dnice/dtotal*100
system 在internal時間段裏,核心時間(%) dsystem/dtotal*100
iowait 在internal時間段裏,硬盤IO等待時間(%) diowait/dtotal*100
irq 在internal時間段裏,軟中斷時間(%) dirq/dtotal*100
soft 在internal時間段裏,軟中斷時間(%) dsoftirq/dtotal*100
idle 在internal時間段裏,CPU除去等待磁盤IO操做外的由於任何緣由而空閒的時間閒置時間 (%) didle/dtotal*100
intr/s 在internal時間段裏,每秒CPU接收的中斷的次數 dintr/dtotal*100
CPU總的工做時間=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
duser=user_cur – user_pre
dtotal=total_cur-total_pre
其中_cur 表示當前值,_pre表示interval時間前的值。上表中的全部值可取到兩位小數點。#mpstat -P ALL 2 10Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009 10:07:57 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s10:07:59 PM all 20.75 0.00 10.50 1.50 0.25 0.25 0.00 66.75 1294.5010:07:59 PM 0 16.00 0.00 9.00 1.50 0.00 0.00 0.00 73.50 1000.5010:07:59 PM 1 25.76 0.00 12.12 1.52 0.00 0.51 0.00 60.10 294.00