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