需用iostat -x 1 2获取avgqu-sz:首次输出为系统启动以来均值,第二次起为最近1秒实时采样值;若命令未找到则安装sysstat包;也可通过/proc/diskstats第12列与第4列计算近似队列长度,但I/O完成数为0时结果无效。

在Linux系统中查看磁盘读写队列长度avgqu-sz,需使用iostat命令并确保输出包含该指标——它反映I/O请求在设备队列中平均等待处理的数量,值持续高于1通常意味着磁盘存在响应延迟压力。
确认iostat是否可用并安装sysstat
执行iostat -x 1 2,若提示command not found,则需先安装sysstat包:CentOS/RHEL用yum install -y sysstat,Ubuntu/Debian用apt install -y sysstat。安装后需等待首次数据采集完成(sysstat默认启用cron每日收集,但首次运行iostat可能无历史数据)。
用iostat获取avgqu-sz实时值
运行iostat -x 1,每秒刷新一次扩展统计;第一次输出为自系统启动以来的平均值,**第二次及后续输出才是最近1秒的实时采样结果**,avgqu-sz列即在此处显示。
若只需单次快照且跳过首行汇总,可执行iostat -x 1 2 | tail -n +4 | head -n -1,该命令过滤掉头部说明和末尾空行,直接定位到第二组采样数据行。
从/proc/diskstats解析原始队列深度(备用方法)
方法一:读取/proc/diskstats中对应设备的第12列(加权I/O时间,单位毫秒)与第4列(I/O完成次数)计算近似队列长度:echo "scale=2; $(awk '$3==\"sda\" {print $12}' /proc/diskstats) / $(awk '$3==\"sda\" {print $4}' /proc/diskstats) / 1000" | bc -l(将sda替换为实际设备名)。
方法二:用cat /sys/block/sda/stat读取第9个字段(加权I/O时间),除以第3个字段(I/O完成数)再除以1000,结果与iostat avgqu-sz物理意义一致。注意:若I/O完成数为0会导致除零错误,【此时该值无意义,应忽略】。


















