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

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

相關文章
相關標籤/搜索