需结合iostat与iotop协同分析:iostat监控设备级I/O负载(如%util、await、avgqu-sz),iotop定位进程级I/O来源(如按P/R键排序、树状视图),形成从宏观到微观的闭环排查。

如果您需要实时掌握Linux系统中磁盘I/O的负载状况,但仅依赖单一工具无法区分设备级与进程级瓶颈,则需结合iostat与iotop协同分析。以下是具体操作步骤:
一、使用iostat监控设备级I/O负载
iostat提供系统级磁盘吞吐量、响应时间及队列长度等统计信息,适用于识别哪块物理设备或分区存在高负载。其数据源自/proc/diskstats,反映整体I/O压力分布。
1、确认sysstat包已安装:在Ubuntu/Debian系统中执行sudo apt install sysstat;在CentOS/RHEL系统中执行sudo yum install sysstat或sudo dnf install sysstat。
2、运行扩展统计命令持续观察:iostat -x -m 2,其中-x启用详细指标,-m以MB/s为单位输出,2表示每2秒刷新一次。
3、聚焦关键指标判断负载状态:重点关注%util是否持续接近100%(表明设备饱和),await是否显著高于svctm(反映I/O等待加剧),以及avgqu-sz是否长期大于1(提示请求积压)。
4、限定目标设备输出:如仅监控sda设备,运行iostat -x /dev/sda 2;若需包含时间戳便于日志追踪,添加-t参数:iostat -x -t 2。
5、导出结果供离线分析:执行iostat -x -m 2 10 > iostat_report.txt,采集10次样本后写入文件。
二、使用iotop定位进程级I/O来源
iotop以top风格实时展示各进程或线程的读写带宽,弥补iostat无法下钻到进程维度的不足,特别适用于快速锁定造成高I/O的罪魁应用。
1、安装iotop工具:Ubuntu/Debian系统执行sudo apt install iotop;CentOS/RHEL系统执行sudo yum install iotop或sudo dnf install iotop。
2、以root权限启动监控界面:sudo iotop,因普通用户无权访问全部进程的I/O计数器。
3、启用过滤模式减少干扰:启动后按o键仅显示当前有I/O活动的进程,避免空闲进程占据屏幕。
4、按I/O速率排序定位热点:按P键切换为按磁盘写入速率降序排列,或按R键切换为按读取速率排序。
5、切换视图模式增强可读性:按T启用树状模式,清晰呈现父子进程间的I/O继承关系;按a键切换至累积I/O统计,观察长期资源占用趋势。
三、组合诊断高IO负载场景
当系统出现明显延迟或磁盘响应迟滞时,应先通过iostat确认设备层是否存在异常,再用iotop下钻至进程层验证根因,形成从宏观到微观的闭环排查路径。
1、在终端A中运行iostat -x 2,观察是否存在%util ≥ 95%的设备,同时记录其rMB/s与wMB/s峰值。
2、检查await值是否超过20ms,若持续偏高且svctm稳定在个位数,则说明I/O队列深度过大而非硬件响应慢。
3、另开终端B执行sudo iotop -o -b -n 1获取单次快照,提取TOP 3写密集型进程PID。
4、对每个可疑PID执行ps -p PID -o pid,user,%cpu,%mem,comm,args,确认进程身份及其资源占用特征。
5、若需持续记录进程I/O行为,运行sudo iotop -o -b -d 5 -n 12 >> iotop_log.txt,实现每5秒采样一次、共12次的日志归档。










