Linux 磁盘 IO 过高时的实时监控与分析技巧

大家好,我是 33blog 的博主。在多年的运维工作中,我经常遇到服务器响应变慢的情况,而磁盘 IO 过高往往是罪魁祸首。今天,我将分享一些实用的实时监控和分析技巧,帮助你快速定位问题。这些方法基于我的实战经验,包括一些常见的踩坑点,希望能为你节省宝贵的时间。
1. 使用 iostat 实时监控磁盘 IO
iostat 是 Linux 系统自带的工具,能提供详细的磁盘 IO 统计信息。我第一次用它时,就被它的简洁和高效折服。下面是一个基本用法示例,每隔 2 秒刷新一次数据:
iostat -x 2
输出中,重点关注 %util 列,它表示磁盘利用率。如果持续高于 80%,说明磁盘 IO 压力大。另外,await 列显示平均等待时间,过高可能表示磁盘响应慢。记得在实战中结合多个指标判断,避免误判。
2. 利用 iotop 定位高 IO 进程
iostat 告诉你磁盘忙,但不知道是哪个进程在捣乱。这时,iotop 就派上用场了。它像 top 命令一样,实时显示进程的 IO 使用情况。安装后运行:
sudo iotop -o
-o 选项只显示正在执行 IO 的进程,避免信息过载。我曾经用它发现一个日志脚本在疯狂写盘,导致系统卡顿。注意,iotop 需要 root 权限,否则可能看不到所有进程。
3. 使用 pidstat 深入分析进程 IO
如果你需要更详细的进程 IO 数据,pidstat 是个好选择。它属于 sysstat 包,可以监控单个进程的读写速率。例如,监控进程 ID 为 1234 的 IO:
pidstat -d -p 1234 2
这会每 2 秒输出一次该进程的磁盘读写统计。在实战中,我常用它来验证 iotop 的发现,确保不冤枉“好人”。安装 sysstat 如果还没装:sudo apt-get install sysstat(基于 Debian/Ubuntu)。
4. 结合 lsof 查看文件操作
知道了高 IO 进程,下一步是看它在操作哪些文件。lsof 命令可以列出进程打开的文件。例如,查看进程 1234 打开的文件:
sudo lsof -p 1234
这能帮你识别是否在读写大文件或频繁访问日志。有一次,我发现一个数据库进程在反复读写临时文件,通过优化查询解决了问题。注意,lsof 输出可能很长,用 grep 过滤关键信息。
5. 使用 vmstat 检查系统整体状态
磁盘 IO 高可能与其他系统资源相关,vmstat 提供了整体视图。运行以下命令,每 2 秒刷新:
vmstat 2
关注 bi(块输入)和 bo(块输出)列,它们表示块设备 IO。如果这些值持续高,且 wa(IO 等待)列也高,说明 CPU 在等待 IO。在我的经验中,这常伴随内存不足,导致频繁交换。
6. 实战案例:快速排查流程
假设服务器响应慢,我通常按以下步骤操作:先用 iostat -x 2 确认磁盘 IO 高,然后用 iotop -o 找进程,接着用 pidstat 和 lsof 深入分析。最后,结合业务日志优化代码或配置。记住,及时监控比事后补救更重要——我吃过亏,所以现在定期设置警报。
希望这些技巧对你有用!如果你有更多问题,欢迎在 33blog 留言讨论。保持学习,运维之路越走越顺。


iostat确实好用,每次排查问题第一个想到的就是它