iostat无法直接监控挂载点目录,需先通过df -h或findmnt定位对应块设备,再用iostat -dxk 1监控该设备,并结合lsof +d /path定位活跃进程。

直接用 iostat 无法监控“挂载点目录”(比如 /var/log 或 /data)本身的性能,因为它只作用于底层块设备(如 sda、nvme0n1、dm-0),不感知文件系统层级或挂载路径。但你可以通过“挂载点 → 对应设备 → iostat 监控该设备”的链路完成间接定位和分析。
确认挂载点对应的物理设备
这是最关键的一步。只有知道目录挂在哪个设备上,iostat 才能对症下药:
- 运行
df -h /path/to/mountpoint(例如df -h /data),查看 “Filesystem” 列输出的设备名(如/dev/sdb1、/dev/mapper/vg-root或/dev/nvme0n1p2); - 若显示的是 LVM 逻辑卷(如
/dev/mapper/vg-lv_data),可用ls -l /dev/mapper/vg-lv_data查其底层设备; - 若为 NVMe 或多路径设备,也可用
findmnt -D /data或lsblk -f | grep -A5 "/data"辅助识别。
用 iostat 监控对应设备的实时 I/O
拿到设备名后,用 iostat -xk 1 聚焦观察(推荐扩展模式 + KB 单位 + 每秒刷新):
-
iostat -dxk 1:显示所有设备的扩展指标,重点关注await(平均响应时间)、avgqu-sz(平均队列长度)、r/s和w/s(读写 IOPS)、rkB/s和wkB/s(吞吐量); -
iostat -dxk -p sdb1 1:只监控特定分区(如sdb1),避免被其他设备干扰; - 注意:
%util在 SSD/NVMe 上参考价值低,别单凭它判断卡顿——重点看await (SSD)或 <code>(机械盘)是否持续超标。
结合 lsof 定位挂载点上的活跃进程
iostat 告诉你“设备忙”,但不知道“谁在用”。配合 lsof 可锁定具体进程:
-
sudo lsof +D /data 2>/dev/null | head -20:列出正在访问/data下任意文件的进程(含 PID、命令、打开的文件); - 若发现大量
.log或.tmp文件被写入,可进一步查该 PID 的 I/O 行为:sudo cat /proc/PID/io看读写字节数; - 再用
sudo iotop -o -p PID验证该进程是否确实在持续写入磁盘。
验证与排除常见干扰
避免误判,需排查几个典型干扰源:
-
缓存影响:刚执行写操作时
wkB/s高,但await很低,可能是数据暂存在 page cache 中未落盘,加sync后再观察; -
日志刷盘节奏:数据库或应用日志常批量 flush,用
iostat -dxk 1 10多采几次,取稳定值而非首行(首行含启动累计,不准); -
容器/虚拟化环境:若挂载点在 Docker volume 或 K8s PVC 下,
iostat显示的是宿主机设备,需同步检查容器内iotop或cat /sys/fs/cgroup/blkio/.../blkio.io_service_bytes。











