Linux 效能分析

iostat
[root@hqu-mysql ~]# iostat -x
Linux 2.6.9-89.0.15.ELsmp (hqu-mysql)   2009年11月25日

avg-cpu:  %user   %nice    %sys %iowait   %idle
                   7.95       0.00       5.96       1.24      84.85

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz await  svctm  %util
ida/c0d0     0.03   7.54  6.29  7.11   94.87  117.22    47.44    58.61    15.84     1.09       81.67   4.51   6.04
ida/c0d0p1   0.03   7.54  6.29  7.11   94.87  117.22    47.44    58.61    15.84     1.09       81.68   4.51   6.04
ida/c0d0p2   0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00        45.66     0.00       12.72  10.03   0.00
數據庫應該是有硬盤io延遲問題的。

結果詳解:
% user      顯示了在用戶級(應用程序)執行時產生的 CPU 使用率百分比。
% sys       顯示了在系統級(內核)執行時產生的 CPU 使用率百分比。
% idle       顯示了在 CPU 空閒並且系統沒有未完成的磁盤 I/O 請求時的時間百分比。
% iowait   顯示了 CPU 空閒期間系統有未完成的磁盤 I/O 請求時的時間百分比。

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系統已經滿負荷,該磁盤可能存在瓶頸。

svctm 一般要小於 await (因為同時等待的請求的等待時間被重複計算了),svctm 的大小一般和磁盤性能有關,CPU/內存的負荷也會對其有影響,請求過多也會間接導致 svctm 的增加。await 的大小一般取決於服務時間(svctm) 以及 I/O 隊列的長度和 I/O 請求的發出模式。如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大於 svctm,說明 I/O 隊列太長,應用得到的響應時間變慢,如果響應時間超過了用戶可以容許的範圍,這時可以考慮更換更快的磁盤,調整內核 elevator 算法,優化應用,或者升級 CPU。

隊列長度(avgqu-sz)也可作為衡量系統 I/O 負荷的指標,但由於 avgqu-sz 是按照單位時間的平均值,所以不能反映瞬間的 I/O 洪水。

vmstat
[root@sends ~]# vmstat -a 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r  b   swpd   free  inact active   si   so    bi    bo   in    cs us sy id wa
2  0      0 589428 847744 2391492    0    0     1    21    3     6 23 13 64  0
2  0      0 585972 848296 2394760    0    0     0    62 1076   754 21 33 46  0
1  0      0 589108 848796 2390680    0    0     0     0 1077   702 22 33 46  0
1  0      0 629604 825368 2374436    0    0     0    30 1024   685 20 32 47  0
1  0      0 631012 825368 2372948    0    0     0    20 1029   682 21 33 46  0


結果分析:
Procs
r:等待執行的任務數
b:處在非中斷睡眠狀態的進程數
展示了正在執行和等待CPU資源的任務個數。當這個值超過了CPU數目,就會出現CPU瓶頸了

Memory
swpd:正在使用的swap大小單位K
free:空閒的內存空間
buff:已使用的buff大小,對塊設備的讀寫進行緩衝
cache:已使用的cache大小,文件系統的cache
inact:
active:

Swap
si:交換內存使用,由磁盤調入內存
so:交換內存使用,由內存調入磁盤

IO
bi:從塊設備讀入的數據總量(讀磁盤) (KB/s)
bo:寫入到塊設備的數據總理(寫磁盤) (KB/s)

System
in:每秒產生的中斷次數
cs:每秒產生的上下文切換次數
上面這2個值越大,會看到由內核消耗的CPU時間會越多

CPU
us:用戶進程消耗的CPU時間百分比
us 的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超過50% 的使用,那麼我們就該考慮優化程序算法或者進行加速了
sy:內核進程消耗的CPU時間百分比
sy 的值高時,說明系統內核消耗的CPU資源多,這並不是良性的表現,我們應該檢查原因。
id:空閒
wa:IO等待消耗的CPU時間百分比
wa 的值高時,說明IO等待比較嚴重,這可能是由於磁盤大量作隨機訪問造成,也有可能是磁盤的帶寬出現瓶頸(塊操作)。

使用Linux性能分析工具
Linux在具有高穩定性、可靠性的同時,具有很好的可伸縮性和擴展性,
能夠針對不同的應用和硬件環境調整,優化出滿足當前應用需要的最佳性能。
因此企業在維護Linux系統、進行系統調優時,瞭解系統性能分析工具是至關重要的。

在Linux下有很多系統性能分析工具,
比較常見的有top、free、ps、time、timex、uptime等。
下文將介紹幾個較為重要的性能分析工具vmstat、iostat和sar及其使用。

用vmstat監視內存使用情況
vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監視。
它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。

vmstat的語法如下:
vmstat [-V] [-n] [delay [count]]

其中,-V表示打印出版本信息;-n表示在週期性循環輸出時,輸出的頭部信息僅顯示一次;
delay是兩次輸出之間的延遲時間;count是指按照這個時間間隔統計的次數。
對於vmstat輸出各字段的含義,可運行man vmstat查看。



用iostat監視I/O子系統情況
iostat是I/O statistics(輸入/輸出統計)的縮寫,iostat工具將對系統的磁盤操作活動進行監視。
它的特點是匯報磁盤活動統計情況,同時也會匯報出 CPU使用情況。
同vmstat一樣,iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統的整體情況進行分析。

iostat的語法如下:
iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]

其中,-c為匯報CPU的使用情況;-d為匯報磁盤的使用情況;-k表示每秒按kilobytes字節顯示數據;
-t為打印匯報的時間;-v表示打印出版本信息和用法;-x device指定要統計的設備名稱,默認為所有的設備;
interval指每次統計間隔的時間;count指按照這個時間間隔統計的次數。



使用sar進行綜合分析
sar是System Activity Reporter(系統活動情況報告)的縮寫。
顧名思義,sar工具將對系統當前的狀態進行取樣,然後通過計算數據和比例來表達系統的當前運行狀態。
它的特點是可以連續對系統取樣,獲得大量的取樣數據;取樣數據和分析的結果都可以存入文件,所需的負載很小。
sar是目前Linux上最為全面的系統性能分析工具之一,可以從14個大方面對系統的活動進行報告,
包括文件的讀寫情況、系統調用的使用情況、串口、CPU效率、內存使用狀況、進程活動及IPC有關的活動等,使用也是較為複雜。

sar的語法如下:

sar [-option] [-o file] t [n]
它的含義是每隔t秒取樣一次,共取樣n次。其中-o file表示取樣結果將以二進制形式存入文件file中。

sar option參數說明

選項 功能
-A 彙總所有的報告
-a 報告文件讀寫使用情況
-B 報告附加的緩存的使用情況
-b 報告緩存的使用情況
-c 報告系統調用的使用情況
-d 報告磁盤的使用情況
-g 報告串口的使用情況
-h 報告關於buffer使用的統計數據
-m 報告IPC消息隊列和信號量的使用情況
-n 報告命名cache的使用情況
-p 報告調頁活動的使用情況
-q 報告運行隊列和交換隊列的平均長度
-R 報告進程的活動情況
-r 報告沒有使用的內存頁面和硬盤塊
-u 報告CPU的利用率
-v 報告進程、i節點、文件和鎖表狀態
-w 報告系統交換活動狀況
-y 報告TTY設備活動狀況


另一種語法如下:

sar [-option] [-s time] [-e time] [-i sec] [-f file]

含義是表示從file文件中取出數據,如果沒有指定-f file,
則從標準數據文件/var/adm/sa/sadd取數據,其中dd表示當前天。
另外,-s time表示起始時間;-e time表示停止時間;
-i sec表示取樣的時間間隔,如果不指定則表示取文件中所有的數據。

一般它與-q和-u聯合使用,以便對每個CPU的使用情況進行分析,比如運行如下命令:
sar -q -u 5 1

由於sar命令太複雜,只有通過熟練使用才能瞭解每個選項的含義,
對於sar輸出中每個字段的含義運行man sar命令可以得到詳細的解釋。

留言

張貼留言

這個網誌中的熱門文章

c語言-關於#define用法

PHP教學 - 資料型態(Data Type) - 上

CMD常用網管指令