介绍
磁盘IO突然很高是运维人员经常碰到的问题,这是由于有大量的磁盘读和写造成的,通常发生在数据库身上,然而发生的场景各种各样。本文举几个例子阐述解决思路。
正文
找到是什么程序在大量的进行读写操作。可以通过监控软件(如zabbix)或工具(如atop)查看磁盘IO的历史记录。
本文假设场景发生在xen虚拟机上,在母机上用iostat查看IO状态# iostat -xdk 2
输出如下:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 24.50 0.00 13.50 0.00 141.00 20.89 1.71 126.67 0.00 126.67 39.70 53.60
sdb 0.00 1.50 0.00 12.00 0.00 132.00 22.00 1.42 108.33 0.00 108.33 83.33 100.00
dm-0 0.00 0.00 0.00 12.50 0.00 12.50 2.00 2.36 188.48 0.00 188.48 11.84 14.80
dm-1 0.00 0.00 0.00 6.00 0.00 24.00 8.00 0.76 126.00 0.00 126.00 33.33 20.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-3 0.00 0.00 0.00 6.50 0.00 26.00 8.00 1.18 181.54 0.00 181.54 22.46 14.60
dm-4 0.00 0.00 0.00 3.00 0.00 12.00 8.00 0.40 133.33 0.00 133.33 66.67 20.00
dm-5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-7 0.00 0.00 0.00 3.50 0.00 23.50 13.43 0.21 60.57 0.00 60.57 33.71 11.80
dm-8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-10 0.00 0.00 0.00 4.00 0.00 28.00 14.00 0.47 117.50 0.00 117.50 78.50 31.40
dm-11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-14 0.00 0.00 0.00 2.50 0.00 15.00 12.00 0.32 126.40 0.00 126.40 94.40 23.60
dm-15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-16 0.00 0.00 0.00 15.00 0.00 134.00 17.87 1.56 93.60 0.00 93.60 66.67 100.00
dm-17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
可以看出sdb和dm-16使用了100%的%util,下面需要找出哪个逻辑卷使用了100%的IO:# dmsetup ls
输出如下:............
domovg-servername--db_hdc (253, 16)
...........
找到了对应的逻辑卷后,登录到对应的机器上,用dstat或iostat找出哪个进程使用了大量IO:
# dstat --top-bio-adv
如果是数据的问题到导致的,通常是以下操作导致的:
1 scp,tar,gzip,cp
2 备份
3 有大量的慢查询
4 全盘扫描的SQL语句
还有可能是raid卡的电池(BBU)出现了问题导致的,可根据对应的服务器型号用对应的命令查看raid状态(如megacli)