云联信息实操:磁盘 IO 卡顿,三个层面的排查顺序
系统响应变慢,CPU 不高、内存够用,查了 SQL 也没问题。最后发现磁盘 IO 等待时间占了四成。云服务器的磁盘性能有上限,超过上限,再优化代码也没用。
第一层:看监控指标
云监控里的磁盘读写吞吐、IOPS、等待时间。三个指标同时看:吞吐到顶是带宽瓶颈,IOPS 到顶是随机读写瓶颈,等待时间长是队列积压。
第二层:看磁盘类型
普通云硬盘、SSD 云硬盘、增强型 SSD,IOPS 差几倍。数据库跑在普通盘上,随机读写性能天生不足,换盘比优化代码有效。
第三层:看系统内部
用系统工具看哪个进程在大量读写,是日志刷盘、是备份任务、还是数据库的临时文件。定位到进程,才知道该改什么。
常见原因一:日志级别过低
调试日志开着没关,每秒写几百行,磁盘被日志占满。生产环境用信息级,调试时临时开,改完关掉。
常见原因二:数据库临时表
复杂的排序和关联会产生大量临时表,落到磁盘上就是密集读写。优化 SQL 或加索引,比加磁盘便宜。
常见原因三:备份与同步任务
备份任务在业务高峰跑,磁盘被占满。把备份挪到低谷时段,问题立刻缓解。
云盘的性能上限
云盘性能与容量相关,容量小的盘 IOPS 上限低。给数据库盘留足容量,不只是为了存数据,也是为了性能。
多盘分担
数据盘、日志盘、备份盘分开,避免互相争抢。一块盘上跑所有东西,任何一类 IO 高峰都会影响全局。
换盘与迁移
云盘支持在线扩容和类型变更,变更期间性能可能短暂下降。安排在业务低谷做,做完观察一天。
IO 与业务高峰的关系
把磁盘监控曲线和业务访问曲线叠在一起看,能判断是业务增长导致还是异常任务导致。两条曲线的时间点是否重合,是关键线索。
云盘的性能测试
新购云盘先做一次基准测试,确认实际性能达到标称值。达不到就找厂商,别等业务上线才发现。
IO 测试的方法
用连续的随机读写测试云盘性能,模拟数据库的真实负载。顺序读写的数据好看,参考价值低。
缓存层的引入
读多写少的场景,加一层缓存能显著降低磁盘压力。缓存命中率是关键指标。
预留 IO 余量
磁盘 IO 长期跑到七成以上,任何突发都会排队。留三成余量,是性价比最高的稳定性投入。
磁盘 IO 问题的排查有顺序:先看监控指标,再看磁盘类型,最后看系统内部。顺序对了,半小时能定位;顺序错了,可能查两天。日志级别、临时表、备份任务是最常见的三个原因。云联信息【资深云服务专家微信:cloud7591】在做性能诊断时,通常先拉一周的磁盘监控曲线,看瓶颈出现在哪个时段。
