记一次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 压测,详细参数我就不讲了,有兴趣的同窗看下块存储性能进程

相关文章
相关标签/搜索