Linux命令----分析系統I/O的瓶頸
procs-----------memory--------------------swap--- ---io---- --system---- ------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 144 186164 105252 2386848 0 0 18 166 83 2 48 21 31 0
2 0 144 189620 105252 2386848 0 0 0 177 1039 1210 34 10 56 0
0 0 144 214324 105252 2386848 0 0 0 10 1071 670 32 5 63 0
0 0 144 202212 105252 2386848 0 0 0 189 1035 558 20 3 77 0
2 0 144 158772 105252 2386848 0 0 0 203 1065 2832 70 14 15 0
-bi:從塊裝置讀入的資料總量(讀磁碟)(KB/S)
-bo:寫入到塊裝置的資料總量(寫磁碟)(KB/S)
隨機磁碟讀寫的時候,這2個值越大(如超出1M),能看到CPU在IO等待的值也會越大
如果你的系統沒有iostat,sar,mpstat等命令,安裝
程式程式碼
iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]
8 0 sda 17945521 1547188 466667211 174042714 15853874 42776252 469241932 2406054445 0 137655809 2580960422
8 1 sda1 936 1876 6 12
8 2 sda2 19489178 466659986 58655070 469240224
8 3 sda3 1270 1441 33 264
8 4 sda4 4 8 0 0
8 5 sda5 648 1442 0 0
8 6 sda6 648 1442 0 0
第2列 : 磁碟次裝置號(minor)
第3列 : 磁碟的裝置名(name)
第4列 : 讀請求總數(rio)
第5列 : 合併的讀請求總數(rmerge)
第6列 : 讀扇區總數(rsect)
第7列 : 讀資料花費的時間,單位是ms.(從__make_request到 end_that_request_last)(ruse)
第8列 : 寫請求總數(wio)
第9列 : 合併的寫請求總數(wmerge)
第10列 : 寫扇區總數(wsect)
第11列 : 寫資料花費的時間,單位是ms. (從__make_request到 end_that_request_last)(wuse)
第12列 : 現在正在進行的I/O數(running),等於I/O佇列中請求數
第13列 : 系統真正花費在I/O上的時間,除去重複等待時間(aveq)
第14列 : 系統在I/O上花費的時間(use)。
#iostat -x 1
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/27/2009
avg-cpu: %user %nice %system %iowait %steal %idle
30.72 0.00 5.00 5.72 0.00 58.56
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.79 21.81 9.15 8.08 237.99 239.29 27.69 1.32 76.31 4.07 7.02
sdb 0.69 19.13 3.26 2.99 153.08 176.92 52.85 0.43 68.80 5.96 3.72
sdc 3.47 89.30 10.95 7.30 213.30 772.94 54.04 1.32 72.43 4.18 7.63
每項資料的含義如下,
rrqm/s: 每秒進行 merge 的讀運算元目。即 rmerge/s
wrqm/s: 每秒進行 merge 的寫運算元目。即 wmerge/s
r/s: 每秒完成的讀 I/O 裝置次數。即 rio/s
w/s: 每秒完成的寫 I/O 裝置次數。即 wio/s
rsec/s: 每秒讀扇區數。即 rsect/s
wsec/s: 每秒寫扇區數。即 wsect/s
rkB/s: 每秒讀K位元組數。是 rsect/s 的一半,因為每扇區大小為512位元組。
wkB/s: 每秒寫K位元組數。是 wsect/s 的一半。
avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)。即 (rsect+wsect)/(rio+wio)
avgqu-sz: 平均I/O佇列長度。即 aveq/1000 (因為aveq的單位為毫秒)。
await: 平均每次裝置I/O操作的等待時間 (毫秒)。即 (ruse+wuse)/(rio+wio)
svctm: 平均每次裝置I/O操作的服務時間 (毫秒)。即 use/(rio+wio)
%util: 一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間
I/O佇列是非空的,即use/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 洪水。
io/s = r/s +w/s
await=(ruse+wuse)/io
(每個請求的等待時間)
await*io/s=每秒內的I/O請求總共需要等待的ms
avgqu-sz=
await*(r/s+w/s)/1000
(佇列長度)
17949157 1547772 466744707 174070520 15855905 42781288 469298468 2406092114 2 137680700 2581025934
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/29/2009
12:19:42 AM 21.48 9.40 12.08 187.92 429.53
12:19:43 AM 14.00 14.00 0.00 840.00 0.00
12:19:44 AM 10.29 8.82 1.47 235.29 217.65
12:19:45 AM 12.87 10.89 1.98 752.48 142.57
12:19:46 AM 19.82 12.61 7.21 425.23 381.98
12:19:47 AM 19.00 19.00 0.00 512.00 0.00
12:19:49 AM 9.29 9.29 0.00 262.86 0.00
12:19:50 AM 16.00 5.00 11.00 144.00 536.00
12:19:51 AM 17.65 8.82 8.82 211.76 235.29
12:19:52 AM 41.41 29.29 12.12 614.14 363.64
Average: 17.75 12.30 5.45 397.19 231.99
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/29/2009
12:38:57 AM dev8-0 15.00 232.00 0.00 15.47 0.01 0.87 0.87 1.30
12:38:57 AM dev8-16 6.00 80.00 320.00 66.67 0.05 8.67 8.67 5.20
12:38:57 AM dev8-32 10.00 224.00 0.00 22.40 0.09 9.20 9.20 9.20
每秒鐘讀取的扇區數,每個扇區512 bytes.
每秒鐘寫入的扇區數,每個扇區512 bytes.
對磁碟請求的扇區的平均大小。
對磁碟請求的平均佇列長度.
請求響應的平均時間(毫秒).包括在請求佇列中的時間和響應消耗時間
對IO請求的服務時間.
I/O請求佔用的CPU時間百分比。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015605/viewspace-2883512/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- I/O已經不再是效能瓶頸
- 在Linux中,如何進行系統效能瓶頸分析?Linux
- 如何迅速分析出系統CPU的瓶頸在哪裡?
- 效能分析(6)- 如何迅速分析出系統 CPU 的瓶頸在哪裡
- [衝破核心瓶頸,讓I/O效能飆升]DPDK工程師手冊工程師
- 應用系統瓶頸排查和分析的思考-Arthas 實戰
- JAVA I/O系統Java
- 系統級 I/O
- 資料庫叢集伺服器系統效能瓶頸分析(zt)資料庫伺服器
- 軟體測試:瓶頸分析方法
- 利用PerfDog分析遊戲效能瓶頸遊戲
- Chrome執行時效能瓶頸分析Chrome
- 如何使用 Wireshark 分析 TCP 吞吐瓶頸TCP
- AI系統有助突破醫藥研發瓶頸AI
- 作業系統—I/O 模型作業系統模型
- 記錄node記憶體瓶頸分析記憶體
- LightDB資料庫效能瓶頸分析(一)資料庫
- NVMe儲存效能瓶頸的主要來源:檔案系統
- Java™ 教程(命令列I/O)Java命令列
- 系統程式設計 - I/O模型程式設計模型
- Linux下的5種I/O模型與3組I/O複用Linux模型
- 人到中年了的瓶頸
- 效能測試-服務端瓶頸分析思路服務端
- 2020.10.6 效能課堂筆記-cpu 瓶頸分析筆記
- Linux I/O排程器Linux
- 使用 sar 和 kSar 來發現 Linux 效能瓶頸Linux
- printStackTrace()造成的併發瓶頸
- 打破Kafka帶來的瓶頸?Kafka
- 前端瓶頸如何打破???前端
- 如何突破前端瓶頸???前端
- 效能分析(7)- 未利用系統快取導致 I/O 緩慢案例快取
- 作業系統程式、儲存和I/O作業系統
- 如何更改Linux的I/O排程器Linux
- 如何監測 Linux 的磁碟 I/O 效能Linux
- Linux裡五種I/O模型Linux模型
- Linux下磁碟I/O測試Linux
- 軟體測試學習資源—瓶頸分析方法
- 2020.10.8 效能課堂筆記-記憶體瓶頸分析筆記記憶體