现场是这样的。top 里等待 IO 的比例长期两成以上,iostat 却显示磁盘读写量很小,业务查询变慢,重启数据库也没有改善。
把日志和配置对完,能解释这个现象的基本就这几处。挂载的远端存储响应慢,请求全堆在应用侧;表锁或者行锁等待,进程进入不可中断状态;内存不足触发频繁换页,等待算在处理器上。
同时看等待和磁盘指标
vmstat 1 5
再往下确认是否有大量不可中断进程
ps -eo stat | grep -c D
随后检查远端挂载的延迟
mount | grep -E 'nfs|cifs'
剩下的就是看内存是否在频繁换页
grep -E 'pswpin|pswpout' /proc/vmstat
这次没动代码,只在配置和运行环境上找原因。
隔了一天再看,现象没变,说明不是偶发。
怎么算真的好了,看的是同一批现象。等待比例降到百分之五以下,业务查询耗时恢复,锁等待记录消失。
等待高不等于磁盘坏,锁等待和远端存储都会表现成一样,先分清是本地 IO 还是网络 IO。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。