恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Linux磁盘IO性能分析:iostat、iotop、fio实战

  • 首页
  • 资讯中心
  • /
  • Linux磁盘IO性能分析:iostat、iotop、fio实战

相关资讯

GEO实战:哪些平台真正认可AI引用?友好度分层与落地策略 2026/10/16 3:07:20
SLG手游Unity Asset权限规划:模块化目录与三层隔离实践 2026/10/16 3:07:20
Linux串口通信实战:Modbus RTU协议解析与Python轮询实现 2026/10/16 3:07:20

最新资讯

多模融合时序数据库实战:从数据孤岛到统一SQL引擎的国产化之路
CycleGAN斑马变马:非配对图像翻译的结构主体代码分析
MySQL索引失效排查与治理:从EXPLAIN到慢查询优化实战
软考软件设计师通关指南:高频考点与下午题套路全解析
双目ORB-SLAM2在Euroc数据集上的配置与调试实战
三菱PLC上位机通信实战:Mx Component软元件读取避坑指南

今日推荐

Java八种基本类型深度解析:从内存布局到实战选型
基础:常用快捷键——IDEA、VS Code、PyCharm 与 Linux 终端效率速查
解决ultraedit下verilog .v文件中文注释乱码:把编码配置改到TaoToken辅助排查

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Linux磁盘IO性能分析:iostat、iotop、fio实战

发布时间:2026/10/16 3:07:20
Linux磁盘IO性能分析:iostat、iotop、fio实战 系统卡顿排查到最后一层十有八九是磁盘 IO。CPU 不忙、内存也够但wa就是下不去load莫名其妙地高——很可能有一堆进程卡在D状态等磁盘。磁盘是整台机器里最慢的部件也是最容易被后台任务拖垮的。这一篇用iostat、iotop、pidstat -d、fio四个工具教你看懂磁盘的四个核心指标并定位到具体是哪个进程在制造 IO。一、先搞懂四个核心指标看磁盘性能无论用什么工具都是围绕这四个数字转指标含义单位IOPS每秒完成多少次 IO 请求次/秒吞吐量带宽每秒读写多少数据MB/s延迟await每个 IO 平均耗时含排队ms队列深度aqu-sz排队等待处理的 IO 数量个它们的关系用生活比喻最好懂IOPS 是「收银台每秒服务几个人」吞吐是「每秒卖出多少货」延迟是「每个顾客平均等多久」队列深度是「队伍里排了多少人」。小文件、随机读写场景数据库、日志看IOPS 延迟大文件、顺序读写场景备份、视频看吞吐。别混。二、iostat磁盘全景统计iostat属于sysstat是最常用的磁盘性能工具。安装sudo apt install sysstat -y # Ubuntu sudo dnf install sysstat -y # Rocky/CentOS语法格式iostat [选项] [间隔] [次数]常用参数参数说明-d只看磁盘不显示 CPU-x显示扩展统计含 await、%util最常用-m以 MB/s 显示吞吐-k以 KB/s 显示默认-p显示分区级1 5每秒采样共 5 次示例与预期输出iostat -dxm 1 3预期输出Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz aqu-sz %util sda 2.50 0.10 0.00 0.00 1.20 40.00 120.00 15.30 8.00 6.25 8.40 130.00 0.98 95.20 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.50 0.02 0.00 0.00 0.80 36.00 0.00 0.10重点列解读列含义判断信号r/sw/s每秒读/写请求数即 IOPSrMB/swMB/s读/写吞吐看带宽用r_awaitw_await读/写平均延迟ms关键高于设备基线就是有问题aqu-sz平均队列深度持续 1 说明排队严重%util设备忙碌时间百分比接近 100% 说明饱和rareq-szwareq-sz平均每次请求大小KB判断是随机小 IO 还是顺序大 IO⚠️ 关于 %util 的经典误区%util接近 100% 常被当作「磁盘满了」的铁证但对SSD/NVMe它非常具有误导性——SSD 内部能并行处理多个请求%util100% 时性能可能还很充沛。判断磁盘是否真饱和更可靠的是await延迟和aqu-sz队列深度范疇await明显高于设备正常水平 → 有压力aqu-sz持续大于 1 → 请求在排队单看%util机械盘还算靠谱SSD 上要结合延迟一起看。三、iotop看到底是谁在 IOiostat告诉你是「哪块盘」忙但不知道「哪个进程」在搞。iotop补上这一环类似top但按 IO 排序。安装sudo apt install iotop -y # Ubuntu sudo dnf install iotop -y # Rocky/CentOS语法格式与常用参数sudo iotop [选项]参数说明-o只显示正在进行 IO 的进程-b批处理模式适合写脚本-n N采样 N 次后退出-P只显示进程不显示线程-k用 KB/s 显示-a显示累计 IO而非实时速率示例与预期输出sudo iotop -oP预期输出Total DISK READ: 1.20 M/s | Total DISK WRITE: 15.30 M/s PID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 1234 be/4 mysql 0.00 B/s 8.50 M/s 0.00% 0.30% mysqld 5678 be/4 root 800.0 K/s 6.00 M/s 0.00% 0.80% rsync --daemon-o过滤掉零 IO 的进程-P只看进程输出干净。第一行的Total是全局读写速率。IO列是该进程等待 IO 的时间占比越高越卡。注意iotop需要 root 权限要读/proc/*/io普通用户会报CONFIG_TASK_IO_ACCOUNTING或权限相关错误。四、pidstat -d无交互的进程级 IOiotop是交互式不适合记录。要做数据采集用pidstat -d同属 sysstat。pidstat -d 1 5UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command root 1234 0.00 8704.00 0.00 120 mysqld root 5678 800.00 6144.00 0.00 85 rsync其中iodelay较新内核是进程被 IO 阻塞的时钟节拍数是比速率更能反映「被 IO 拖累」的指标。五、fio磁盘基准测试上面三个是「看现状」fio是「测能力」——磁盘到底能跑多少 IOPS、多少带宽、延迟多高。换机器、调优前后对比都靠它。安装sudo apt install fio -y # Ubuntu sudo dnf install fio -y # Rocky/CentOS语法格式fio [选项] 作业文件常用参数参数说明--namexxx作业名--rwrandread随机读read/write/randwrite/rw等--bs4k块大小--iodepth32IO 队列深度--numjobs4并发作业数--size1G每个作业读写数据量--runtime60运行 60 秒--time_based到时间才停--direct1绕过 page cache测试真实磁盘--filename/dev/sdb目标设备或文件示例与预期输出测 4K 随机读的 IOPS数据库典型场景sudo fio --namerandread --ioenginelibaio --direct1 \ --rwrandread --bs4k --iodepth32 --numjobs4 \ --size1G --runtime60 --time_based --group_reporting预期输出节选read: IOPS98.5k, BW385MiB/s (403MB/s) lat (usec): min8, max2000, avg32.40 iops : min 95400, max101200, avg98520测顺序写带宽日志/备份场景sudo fio --nameseqwrite --ioenginelibaio --direct1 \ --rwwrite --bs1M --iodepth16 --size1G --runtime30 --time_basedwrite: IOPS520, BW520MiB/s⚠️ fio 使用禁忌绝对不要对生产盘直接跑写测试。--filename/dev/sdb会覆盖数据。测试前用空文件或专门的测试盘/测试分区或在文件系统上用--filename/tmp/testfile非裸设备并确认路径安全--direct1绕过缓存结果更真实不带它测的是「缓存速度」没有参考价值。六、一张表学会看懂 iostat把iostat -dx的输出和判断标准对应起来现象可能原因w/s高、wareq-sz小几 KB大量随机小写日志/数据库常见rMB/s高、rareq-sz大几百 KB顺序大读备份/视频await远高于设备基线磁盘压力大或队列深aqu-sz持续 1请求排队磁盘响应不过来%util100% 但await很低SSD 正常吞吐很可能没满%util100% 且await很高真饱和是瓶颈七、⚠️ 常见错误拿 %util 当唯一标准。SSD 上%util100% 不代表瓶颈要看await和吞吐是否达到设备上限。测磁盘不带--direct1。测出来的是 page cache 速度几个 GB/s跟真实磁盘无关。在生产盘上跑 fio 写测试。直接覆盖数据事故级别。测试要用专门介质。忽视D状态进程。ps里一堆D、load高但 CPU 闲这就是 IO 瓶颈的典型信号去查iotop。只盯平均延迟。await是平均值可能被大量快请求拉低。要结合分布看iostat看不了分布需bpftrace/blktrace或fio的延迟百分位。忽略文件系统层。磁盘快不代表文件系统快ext4的 journal、XFS的分配策略都会影响实际性能。八、原理探究机械盘 vs SSD以及 IO 调度器机械盘HDD的物理限制机械盘有一个转动的盘片和一个移动的磁头。每次读写要寻道seek把磁头移到目标柱面再旋转rotational latency等到扇区转到磁头下。这两步是纯机械动作毫秒级。这决定了 HDD随机 IO 极慢每次都要寻道100~200 IOPS 到头顺序 IO 快得多磁头不用大幅移动可达 100 MB/s所以 HDD 上把随机访问改成顺序访问是最大优化点比如 LSM 树 vs B 树、追加写日志。SSD 的特点SSD 没有机械动作靠闪存芯片随机和顺序差距没 HDD 那么大天生擅长随机 IO几万到几十万 IOPS。但有两个特性要注意写放大闪存以「块」为单位擦除改写要读-改-写实际写入量可能大于请求量。寿命TBW闪存有擦写次数上限fio 压测要适可而止。IO 调度器内核在块设备层有调度器决定 IO 请求怎么合并、排序、下发调度器适用特点nonenoopSSD/NVMe不排队不排序直接下发SSD 自己有内部调度mq-deadline通用保证请求在期限内处理防饿死kyber高性能 SSD按读/写/丢弃分别限流bfq桌面/低延迟按进程分配带宽交互友好查看和设置# 查看当前设备调度器 cat /sys/block/sda/queue/scheduler # 临时改成 noneSSD 推荐 echo none | sudo tee /sys/block/sda/queue/scheduler # 永久写 udev 规则或内核参数 elevatorSSD 上通常用none/mq-deadline把调度交给硬件机械盘可用bfq或mq-deadline优化交互。九、IO 排查实操流程# 1. 系统整体 IO 概况 iostat -dxm 1 5 # 2. 找制造 IO 的进程 sudo iotop -oP # 3. 记录进程级 IO可写脚本 pidstat -d 1 5 # 4. 看是否有进程卡在 D 状态 ps -eo state,pid,cmd | grep ^D # 5. 查看脏页回写压力 grep -E Dirty|Writeback /proc/meminfo # 6. 测设备真实能力非生产盘 sudo fio --namet --rwrandread --bs4k --iodelay... # 见上文一条经验磁盘问题里80% 是「谁在乱写」而不是「磁盘坏了」。日志暴涨、备份撞车、数据库全表扫描、临时表落盘这些应用层行为才是元凶。先找到那个进程再谈优化磁盘本身。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号