記一次IO異常捕獲的過程

背景信息:html

遇到一個IO異常飆升的問題,IO起飛後系統響應異常緩慢,看不到現場一直沒法定位問題,檢查對應時間點應用日誌也沒有發現異常的訪問,這種問題怎麼辦呢?

1,採集系統IO,確認IO異常發生在系統盤,仍是數據盤,使用系統自帶的iostat便可採集ios

# iostat -d 3  -k -x -t 30
06/12/2018 09:52:33 AM
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
xvda              0.00     0.39    0.08    0.70     1.97     5.41    18.81     0.03   44.14   1.08   0.08
xvdb              0.00     0.00    0.00    0.00     0.00     0.00     8.59     0.00    1.14   1.09   0.00

06/12/2018 09:52:36 AM
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
xvda              0.00     0.00    0.00    0.67     0.00     2.68     8.00     0.00    1.00   0.50   0.03
xvdb              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

每隔3秒採集一次磁盤io,輸出時間,一共採集30次,想一直抓的話把30去掉便可,注意磁盤空餘量性能

經過這個命令咱們能夠確認以下信息:

- 問題發生的時間
- 哪塊盤發生的io
- 磁盤的 IOPS( r/s     w/s)以及吞吐量( rkB/s    wkB/s )

2,確認哪塊盤發生了IO還不夠,再抓一下發生IO的進程,須要安裝 iotop 進行捕獲日誌

# iotop -b -o -d 3 -t -qqq -n 30
10:18:41  7024 be/4 root        0.00 B/s    2.64 M/s  0.00 % 93.18 % fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=1k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Write_Testing

每隔3秒採集一次,一共採集30次,靜默模式,只顯示有io發生的進程code

經過這個命令咱們能夠確認以下信息:
- 問題發生的時間
- 產生IO的進程id以及進程參數(command)
- 進程產生的吞吐量(若是有多個能夠把qqq去掉可顯示總量)
- 進程佔用當前IO的百分比

俗話說得好,光說不練假把式,咱們實操來看一下(涉及用戶進程信息,沒有獲得客戶受權所以以fio爲演示)htm

3, 使用 fio 進行 IO 壓測,詳細參數我就不講了,有興趣的同窗看下塊存儲性能進程

相關文章
相關標籤/搜索