效能分析命令輸出說明

tonykorn97發表於2006-09-20

1,CPU使用情況分析

vmstat 命令獲得彙總資訊.
有兩個引數:1,每行輸出需監視系統的秒數.2,提供的報告數.如果沒有提供指定報告的行數,vmstat會一直執行.直到按下時為止.
vmstat返回的第一行資料提供了自系統引導起來以後的平均值.隨後的個行是再上一個取樣期內的平均值.預設的採用時間為5秒.



$ vmstat 5 5
procs memory swap io system cpu
r b swpd free buff cache si so bi bo in cs us sy id wa
1 1 4 172944 248936 5954084 0 0 53 33 86 206 7 5 85 3
0 1 4 172932 248936 5954140 0 0 1561 50 1135 5024 4 6 45 45
2 1 4 172844 248936 5954296 0 0 2132 144 1465 6612 26 8 33 33
1 1 4 172716 248936 5954704 0 0 3140 194 1845 9565 26 8 36 30
1 1 4 172364 248936 5955512 0 0 1963 1062 1329 6709 24 8 29 39

r
b

swpd
free 空閒記憶體
buff (緩衝器,)
cache 快取使用記憶體

si
so

io
bo

cs 每個時間段上下文切換的次數,也就是由核心切換當前執行程式的次數
in 每隔時間間隔內的中斷數。cs或in的數值極高一般標識應將裝置或執行有錯誤

us 使用者時間 數值較大表示計算機處於運算狀態
sy 系統時間 數值較大表示程式正在做大量系統呼叫或執行I/O操作
id 空閒時間 一種粗劣規則是系統中50%的非空閒時間將用於使用者空間,而另外50%用於系統時間;同時總統的空閒時間百分
比不應該為0.

Mpstat用於除錯SMP(sysmetric multiprocessing.對稱多處理器).-P引數可以指定一個要給出報告的特定處理器.
[tapeback@xlback bin]$ mpstat 1 5
Linux 2.6.9-22.ELsmp (xlback.rrl.com) 09/20/2006

05:45:16 PM CPU %user %nice %system %iowait %irq %soft %idle intr/s
05:45:17 PM all 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1029.00
05:45:18 PM all 0.50 0.00 0.00 0.00 0.00 0.00 99.50 1032.00
05:45:19 PM all 4.02 0.00 0.00 0.00 0.00 0.00 95.98 1009.80
05:45:20 PM all 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1017.00
05:45:21 PM all 0.00 0.00 0.00 0.00 0.00 0.00 100.00 1019.00
Average: all 0.90 0.00 0.00 0.00 0.00 0.00 99.10 1021.31


uptime命令獲得負載的平均值.平均負載包括等待磁碟核網路I/O的程式,它並不是CPU使用情況的純粹指標.
% uptime
14:05:05 up 112 days, 22:37, 5 users, load average: 1.84, 1.81, 1.33
給出的3個數值分別對應系統在5分鐘,10分鐘和15分鐘的平均負載,
Linux系統在平均負載達到3的時候就處於繁忙狀態.而且不能很好地處理平均負載超過6的情況.


[tapeback@xlback bin]$ ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.3/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4748 548 ? S Aug22 0:00 init [2]
root 2 0.0 0.0 0 0 ? S Aug22 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN Aug22 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S Aug22 0:00 [migration/1]
root 5 0.0 0.0 0 0 ? SN Aug22 0:00 [ksoftirqd/1]
root 6 0.0 0.0 0 0 ? S< Aug22 0:00 [events/0]
root 7 0.0 0.0 0 0 ? S< Aug22 0:00 [events/1]
root 8 0.0 0.0 0 0 ? S< Aug22 0:00 [khelper]
root 9 0.0 0.0 0 0 ? S< Aug22 0:00 [kacpid]
root 42 0.0 0.0 0 0 ? S< Aug22 0:00 [kblockd/0]
root 43 0.0 0.0 0 0 ? S< Aug22 0:00 [kblockd/1]
root 59 0.0 0.0 0 0 ? S< Aug22 0:00 [aio/0]
root 60 0.0 0.0 0 0 ? S< Aug22 0:00 [aio/1]
root 44 0.0 0.0 0 0 ? S Aug22 0:00 [khubd]
root 58 0.0 0.0 0 0 ? S Aug22 0:03 [kswapd0]
root 133 0.0 0.0 0 0 ? S Aug22 0:00 [kseriod]
root 204 0.0 0.0 0 0 ? S Aug22 0:00 [scsi_eh_0]
root 217 0.0 0.0 0 0 ? S Aug22 0:00 [scsi_eh_1]
root 218 0.0 0.0 0 0 ? S Aug22 0:00 [ahc_dv_0]
root 242 0.0 0.0 0 0 ? S Aug22 0:00 [scsi_eh_2]
root 243 0.0 0.0 0 0 ? S Aug22 0:00 [ahc_dv_1]
root 250 0.0 0.0 0 0 ? S Aug22 0:06 [kjournald]

USER 程式屬主的使用者名稱
PID 程式ID
%CPU 該程式正在使用的CPU時間百分數
%MEM 該程式正在使用的實際記憶體的百分數
VSZ 程式的虛擬大小
RSS 駐留集的大小(記憶體中頁的數量)
TTY 控制終端的ID
STAT 當前程式的狀態:
R=可執行 D=在等待磁碟(或者短期等待)
S=在睡眠(<20秒) T=被跟蹤或者被停止
Z=僵程式
附加標誌:
W=程式被交換出去
<=程式擁有比普通優先順序更高的優先順序
N=程式擁有比普通優先順序更低的優先順序
L=有些頁面被縮在記憶體中
START 啟動程式的時間
TIME 程式已經消耗掉的CPU時間
COMMAND 命令的名稱和引數


[tapeback@xlback bin]$ top
top - 17:47:49 up 29 days, 17:27, 1 user, load average: 0.17, 0.43, 0.36
Tasks: 92 total, 1 running, 85 sleeping, 0 stopped, 6 zombie
Cpu(s): 0.0% us, 0.2% sy, 0.0% ni, 99.8% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 2056208k total, 1977416k used, 78792k free, 60544k buffers
Swap: 2097144k total, 668544k used, 1428600k free, 1597712k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19807 tapeback 16 0 6144 1000 768 R 0.3 0.0 0:00.07 top
1 root 16 0 4748 548 456 S 0.0 0.0 0:00.53 init
2 root RT 0 0 0 0 S 0.0 0.0 0:00.31 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0.0 0.0 0:00.50 migration/1
5 root 34 19 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/1
6 root 5 -10 0 0 0 S 0.0 0.0 0:00.03 events/0
7 root 5 -10 0 0 0 S 0.0 0.0 0:00.04 events/1
8 root 8 -10 0 0 0 S 0.0 0.0 0:00.00 khelper


第一行的專案依次為當前時間、系統啟動時間、當前系統登入使用者數目、平均負載。

第二行為程式情況,依次為程式總數、執行程式數、休眠程式數、僵死程式數、終止程式數。

第三行為CPU狀態,依次為使用者佔用、系統佔用、優先任務佔用、閒置任務佔用。

第四行為記憶體狀態,依次為平均可用記憶體、已用記憶體、空閒記憶體、快取使用記憶體。

第五行為交換狀態,依次為平均可用交換容量、已用容量、閒置容量、交換快取記憶體容量。

PID 程式ID
USER 程式屬主的使用者名稱
PR
NI
VIRT
RES
SHR
S
%CPU 該程式正在使用的CPU時間百分數
%MEM 該程式正在使用的實際記憶體的百分數
TIME 程式已經消耗掉的CPU時間
COMMAND 命令的名稱和引數

sar的語法如下:
sar [-options] [interval [count]]
其中,internal是兩次取樣的間隔時間;count是指取樣的次數;與CPU相關的options有:

引數的含義如下:

-c 表示輸出採用的時間
-e hh:mm:ss 表示只顯示CPU的資訊
-i {irq |SUM|ALL|XALL} 相鄰的兩次取樣的間隔時間
-P {cpu|ALL}
-q 顯示在取樣的時刻,可執行佇列的任務的個數,以及系統平均負載
-u CPU 使用的情況,報告了cpu的使用者態,系統態,等待I/O和空閒時間上的百分比。
-w: 每秒上下文交換率
-o: filename 將結果放在檔案裡
-f: filename 表示從file檔案中取出資料,如果沒有指定-f file,則從標準資料檔案

sar -c 2 -q 2 -u -w
Linux 2.6.9-22.ELsmp (xlback.rrl.com) 09/20/2006

07:23:48 PM proc/s
07:23:50 PM 0.00

07:23:48 PM cswch/s
07:23:50 PM 325.87

07:23:48 PM CPU %user %nice %system %iowait %idle
07:23:50 PM all 0.00 0.25 0.00 0.00 99.75

07:23:48 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
07:23:50 PM 0 113 0.05 0.20 0.14

與CPU有關的輸出的含義

引數 解釋 從/proc/stat獲得資料
proc/s 在internal時間段裡,每秒上下文切換率 processes/total*100
cswch 在internal時間段裡,每秒上下文切換率 ctxt/total*100
intr/s 在internal時間段裡,每秒CPU接收的中斷的次數 idle/total*100

從/proc/loadavg獲得資料
runq-sz 取樣時,執行佇列中任務的個數,不包括vmstat 程式。 procs_running-1
plist-sz 取樣時,系統中活躍的任務的個數 nr_threads
ldavg-1 取樣的前一秒鐘系統的負載(%) lavg_1
ldavg-5 取樣的5秒鐘系統的負載(%) lavg_5
ldavg-15 取樣的前15秒鐘系統的負載(%) lavg_15

sar 1 10
Linux 2.6.9-22.ELsmp (xxx) 09/20/2006

06:54:52 PM CPU %user %nice %system %iowait %idle
06:54:53 PM all 0.50 0.00 0.00 0.00 99.50
06:54:54 PM all 1.00 0.00 0.50 0.00 98.50
06:54:55 PM all 0.00 0.00 0.50 0.00 99.50
06:54:56 PM all 0.00 0.00 0.00 0.00 100.00
06:54:57 PM all 5.97 0.00 0.50 0.50 93.03
06:54:58 PM all 0.00 0.00 0.50 0.00 99.50

06:54:58 PM CPU %user %nice %system %iowait %idle
06:54:59 PM all 0.50 0.00 0.00 0.00 99.50
06:55:00 PM all 1.00 0.00 0.00 0.00 99.00
06:55:01 PM all 0.00 0.00 0.00 0.00 100.00
06:55:02 PM all 0.00 0.00 0.00 0.00 100.00
Average: all 0.90 0.00 0.20 0.05 98.85

user 在internal時間段裡,使用者態的CPU時間(%) ,不包含 nice值為負程式 usr/total*100
nice 在internal時間段裡,nice值為負程式的CPU時間(%) nice/total*100
sys 在internal時間段裡,核心時間(%) (system+irq+softirq)/total*100
iowait 在internal時間段裡,硬碟IO等待時間(%) iowait/total*100
idle 在internal時間段裡,CPU除去等待磁碟IO操作外的因為任何原因而空閒的時間閒置時間 (%) idle/total*100

2,linux的記憶體管理.
和unix一樣,linux也是按照頁的單元來管理記憶體的.目前在pc硬體上,頁的大小為4kb.linux核心在程式需要記憶體的時候,分配給他們虛擬頁,每
個虛擬頁都被眏射到實際儲存器上.既RAM或者磁碟上的交換空間.LINUX使用一個"頁表"(pagetable)"來跟蹤這些虛擬頁同實際頁之間的眏射
關係.Linux用交換空間(swapspace)來增加實際RAM的大小,有效地向程式提供它們所需要的記憶體.既然程式都以為他們的虛擬頁眏射到了
實際的記憶體上,所以Linux總是忙於在RAM和交換區之間來回換頁,這種活動稱為調頁(paging).

記憶體使用情況分析.
記憶體活動基本上可以用3個數字來量化:活動虛擬記憶體總量,交換(swapping)率和調頁(paging)率.其中第一個數字表明記憶體的總需求量,後兩個
數字表示那些記憶體中有多少比例正處在使用之中.目標是減少記憶體活動或增加記憶體量,直到調頁率保持在一個可以接受的水平上為止.
使用free命令來判斷當前投入使用的記憶體和交換的數量.帶-t標誌執行這條命令會自動計算出虛擬記憶體的總量.
free -t
total used free shared buffers cached
Mem: 2056208 1977736 78472 0 60552 1598180
-/+ buffers/cache: 319004 1737204
Swap: 2097144 668544 1428600
Total: 4153352 2646280 1507072


Swapon命令來準確地判斷出正在那些檔案和分割槽作為交換空間.

Procinfo命令是把/proc下的檔案已較好的格式顯示出來.
Procinfo -n5 能以5秒鐘為間隔連續的屬性輸出結果.
Procinfo輸出的資訊有一些和free , uptime 和 vmstat
輸出的資訊重複了.此外,procinfo提供了有關核心版本,記憶體調頁,磁碟訪問以及IRQ分配的資訊.可以使用procinfo -a
看到/proc檔案系統裡的更多資訊,其中包括核心的引導引數,核心的可以載入模組,字元裝置和檔案系統

磁碟I/O分析
使用iostat 命令監視磁碟的效能.
$ iostat
Linux 2.6.9-22.ELsmp (xxx) 09/20/2006

avg-cpu: %user %nice %sys %iowait %idle
1.79 0.05 0.29 2.96 94.91

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.61 1.12 15.81 2886882 40672114
sdb 60.69 643.80 267.79 1656348001 688974012
sdc 0.00 0.00 0.00 8527 0

user 在internal時間段裡,使用者態的CPU時間(%) ,不包含 nice值為負程式 usr/total*100
nice 在internal時間段裡,nice值為負程式的CPU時間(%) nice/total*100
sys 在internal時間段裡,核心時間(%) (system+irq+softirq)/total*100
iowait 在internal時間段裡,硬碟IO等待時間(%) iowait/total*100
idle 在internal時間段裡,CPU除去等待磁碟IO操作外的因為任何原因而空閒的時間閒置時間 (%) idle/total*100

tps 每秒的I/O傳輸次數
Blk_read/s 每秒讀取的塊數
Blk_wrtn/s 每秒寫入的塊數
Blk_read 讀取的總塊數
Blk_wrtn 寫入的總塊數

總之:
Cpu的檢查工具有:vmstat mpstat -p uptime ps -aux
Memory free -t swapon -s procinfo top
磁碟 iostat

另: sar 工具.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245480/,如需轉載,請註明出處,否則將追究法律責任。

相關文章