linux查看虛擬內存和cpu佔用率

top
free
cat /proc/meminfo
cat /proc/cpuinfo
[root@centerlisdb proc]# dmidecode |grep -A16 "Memory Device" | more [object Object] 
========================================================================================

==============================================================

一般我們查看系統性能主要是在以下幾個方面
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接收的中斷的次數 

2.iostat 主要是爲了查看磁盤IO

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 

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 1429992  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的寄存器中,同時將原寄存器中的數據刷到內存中保存。


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的無意識等待時間百分比。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章