top free cat /proc/meminfo cat /proc/cpuinfo [root@centerlisdb proc]# dmidecode |grep -A16 "Memory Device" | more [object Object] ========================================================================================
==============================================================
ios
通常咱們查看系統性能主要是在如下幾個方面
1.用戶使用CPU狀況 展示爲 %user
2.系統使用CPU狀況 展示爲 %sys
3.wio或iowait 展示爲 %iowait 進程因爲等待磁盤IO而使CPU處於空閒狀態的比率
4.CPU的空閒率
5.CPU上下文的交換的比率,也有說明爲CPU上下文的切換。即內存和寄存器中數據的切換
6.nice 這個還不是很明白是啥意思
7.real-time 仍是未知
8.運行隊列的長度
9.平均負載算法
常見用法:
top -d 3 //每三秒刷新一次數據 默認是每5秒刷新一次數據
Ctrl+L //擦除而且重寫屏幕。
概念詳解:
load average:
能夠理解爲每秒鐘CPU等待運行的進程個數.
在Linux系統中,sar -q、uptime、w、top等命令都會有系統平均負載load average的輸出,那麼什麼是系統平均負載呢?
系統平均負載被定義爲在特定時間間隔內運行隊列中的平均任務數。若是一個進程知足如下條件則其就會位於運行隊列中:
- 它沒有在等待I/O操做的結果
- 它沒有主動進入等待狀態(也就是沒有調用'wait')
- 沒有被中止(例如:等待終止) 二 經常使用命令
1.mpstat
2.iostat
3.vmstat
4.sar
三命令詳解
1. mpstat -P ALL 5 //須要注意的P和ALL必定要大寫
服務器
17時22分24秒 CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 17時22分29秒 all 0.30 0.00 0.10 0.67 0.02 0.07 0.00 98.83 821.40 17時22分29秒 0 1.00 0.00 0.60 1.00 0.20 0.60 0.00 96.60 560.00 17時22分29秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.20 0.00 17時22分29秒 2 0.60 0.00 0.20 0.20 0.00 0.20 0.00 99.00 250.20 17時22分29秒 3 0.00 0.00 0.00 4.00 0.00 0.00 0.00 96.00 11.20 17時22分29秒 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.20 0.00 17時22分29秒 5 0.80 0.00 0.00 0.00 0.00 0.00 0.00 99.20 0.00 17時22分29秒 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00 17時22分29秒 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 0.00
上面信息咱們能夠看出,有8個CPU。
%user :在internal時間段裏,即爲用戶態的CPU時間,及登陸用戶所消耗的CPU時間比。
%sys :在internal時間段裏,負進程消耗的CPU時間,佔全部CPU的百分比
%nice :優先進程佔用時間
%iowait:在internal時間段裏,全部未等待磁盤IO操做進程佔CPU的百分比
%irq : 這個仍是未知
%soft : 在internal時間段裏,軟中斷時間(%) softirq/total*100
%idle : 在internal時間段裏,CPU除去等待磁盤IO操做外的由於任何緣由而空閒的時間閒置時間 (%)
intr/s: 在internal時間段裏,每秒CPU接收的中斷的次數
dom
2.iostat 主要是爲了查看磁盤IO
ide
Linux 2.6.16.46-0.12-smp (iread-85) 03/29/2010 avg-cpu: %user %nice %system %iowait %steal %idle 9.47 0.00 1.59 1.27 0.00 86.67 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 15.46 114.45 401.22 44378459 155576936
參數詳解:
avg-cpu中參數不作過多解釋,詳細可見其餘命令,相似。
rrqm/s: 每秒進行 merge 的讀操做數目。即 delta(rmerge)/s
wrqm/s: 每秒進行 merge 的寫操做數目。即 delta(wmerge)/s
r/s: 每秒完成的讀 I/O 設備次數。即 delta(rio)/s
w/s: 每秒完成的寫 I/O 設備次數。即 delta(wio)/s
rsec/s: 每秒讀扇區數。即 delta(rsect)/s
wsec/s: 每秒寫扇區數。即 delta(wsect)/s
rkB/s: 每秒讀K字節數。是 rsect/s 的一半,由於每扇區大小爲512字節。(須要計算)
wkB/s: 每秒寫K字節數。是 wsect/s 的一半。(須要計算)
avgrq-sz:平均每次設備I/O操做的數據大小 (扇區)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O隊列長度。即 delta(aveq)/s/1000 (由於aveq的單位爲毫秒)。
await: 平均每次設備I/O操做的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次設備I/O操做的服務時間 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的時間用於 I/O 操做,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (由於use的單位爲毫秒)
若是 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤
可能存在瓶頸。
idle小於70% IO壓力就較大了,通常讀取速度有較多的wait.
同時能夠結合vmstat 查看查看b參數(等待資源的進程數)和wa參數(IO等待所佔用的CPU時間的百分比,高過30%時IO壓力高)
性能
# iostat -x 1 avg-cpu: %user %nice %sys %idle 16.24 0.00 4.31 79.44 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util /dev/cciss/c0d0 0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29 /dev/cciss/c0d0p1 0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29 /dev/cciss/c0d0p2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面的 iostat 輸出代表秒有 28.57 次設備 I/O 操做: 總IO(io)/s = r/s(讀) +w/s(寫) = 1.02+27.55 = 28.57 (次/秒) 其中寫操做佔了主體 (w:r = 27:1)。
平均每次設備 I/O 操做只須要 5ms 就能夠完成,但每一個 I/O 請求卻須要等上 78ms,爲何? 由於發出的 I/O 請求太多 (每秒鐘約 29 個),假設這些請求是同時發出的,那麼平均等待時間能夠這樣計算:
平均等待時間 = 單個 I/O 服務時間 * ( 1 + 2 + ... + 請求總數-1) / 請求總數
應用到上面的例子: 平均等待時間 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 給出的78ms 的平均等待時間很接近。這反過來代表 I/O 是同時發起的。
每秒發出的 I/O 請求不少 (約 29 個),平均隊列卻不長 (只有 2 個 左右),這代表這 29 個請求的到來並不均勻,大部分時間 I/O 是空閒的。
一秒中有 14.29% 的時間 I/O 隊列中是有請求的,也就是說,85.71% 的時間裏 I/O 系統無事可作,全部 29 個 I/O 請求都在142毫秒以內處理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8,代表每秒內的I/O請求總共須要等待2232.8ms。因此平均隊列長度應爲 2232.8ms/1000ms = 2.23,而 iostat 給出的平均隊列長度 (avgqu-sz) 卻爲 22.35,爲何?! 由於 iostat 中有 bug,avgqu-sz 值應爲 2.23,而不是 22.35。
優化
3.vmstat
ui
procs -----------memory---------- ---sw ap-- -----io---- -system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 1 1 1385712 66752 112164 142××× 3 4 14 50 14 2 10 2 88 1 0 1 0 1385712 64540 112208 1430976 0 0 3 104 2599 6595 15 2 81 3 0 0 0 1385712 62084 112232 1433008 0 0 1 1276 2068 7772 18 1 77 4 0 0 0 1385712 60808 112232 1434036 0 0 1 29 730 3686 9 1 90 1 0
參數詳解:
r:當前系統中等待CPU的進程數(全部的CPU),如果改值連續都大於CPU的個數,代表有多數進程在等待CPU進行處理。如果該值大於CPU個數4倍的話,那麼代表該服務器缺乏CPU,或者CPU的處理速度過慢
in :cpu每秒產生的中斷數
cs :每秒產生的上下文切換
us:用戶佔用的CPU時間百分比,同mpstat 的%user,說明用戶進程消耗的CPU時間多,可是若是長期超50%的使用,那麼咱們就該考慮優化程序算法或者進行加速(好比PHP/PERL)
sy:系統佔用的CPU時間百分比,同mpstat 的%sys。內核進程消耗的CPU時間百分比(sy的值高時,說明系統內核消耗的CPU資源多,這並非良性表現,咱們應該檢查緣由)
id:CPU處於空閒狀態時間百分比,若是空閒時間(cpu id)持續爲0而且系統時間(cpu sy)是用戶時間的兩倍(cpu us) 系統則面臨着CPU資源的短缺.
wa:IO等待消耗的CPU時間百分比,wa的值高時,說明IO等待比較嚴重,這可能因爲磁盤大量做隨機訪問形成,也有可能磁盤出現瓶頸(塊操做)。
us+sy+id = 100%
常見用法:
vmstat -n 3 //每三秒獲取一次數據
vmstat 4 5 //間隔4次輸出5次數據
概念詳解:
上下文切換:CPU的切換就是將輪到該時間片的進程,將該進程中的數據從內容中刷到CPU的寄存器中,同時將原寄存器中的數據刷到內存中保存。
spa
4.sar
sar [options] [-A] [-o file] t [n]
t 和 n兩個參數指定了採樣間隔和採樣次數
- o 較日誌記錄到某個文件中
sar 5 6 //每5秒採用一次,共採樣6次。
日誌
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
參數詳解:大部分的參數同mpstat top等命令。%idle :等同於vmstat 中的id .就是空閒CPU百分比.若是該值高,代表CPU較空閒,可是處理速度仍是很慢,則代表CPU在等待內存分配,應該加大服務器的內存。如果該值持續低於10%,代表CPU處理能力較弱,須要增長CPU。%steal:管理程序維護另外一個虛擬處理器時,虛擬CPU的無心識等待時間百分比。