背景信息: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 壓測,詳細參數我就不講了,有興趣的同窗看下塊存儲性能進程