2026.6.24 15:04:43
在 Linux 下分析磁盘 I/O 并定位具体程序,可以使用以下方法:
实时查看每个进程的磁盘 I/O:
# 安装
sudo apt install iotop # Debian/Ubuntu
sudo yum install iotop # CentOS/RHEL
# 运行
sudo iotop
# 或显示非交互模式
sudo iotop -o # 只显示有 I/O 的进
程查看特定进程或所有进程的 I/O 统计:
# 安装 sysstat 包
sudo apt install sysstat
# 查看所有进程的 I/O
pidstat -d 1
# 查看特定 PID 的 I/O
pidstat -d -p <PID> 1先找到高 I/O 的设备,再定位进程:
# 查看磁盘 I/O 统计
iostat -x 1
# 找到使用该磁盘的进程
lsof /dev/sda1 # 替换为你的磁盘设备直接在 /proc 中查看进程的 I/O 信息:
# 查看所有进程的 I/O 统计
for pid in $(ls /proc | grep -E '^[0-9]+$'); do
if [ -r /proc/$pid/io ]; then
echo "PID: $pid"
cat /proc/$pid/io | grep -E 'read_bytes|write_bytes'
echo "---"
fi
done | less
# 或查看特定进程
cat /proc/<PID>/io更全面的系统监控工具:
sudo apt install atop
sudo atop
# 按 d 键查看磁盘 I/O
# 按 p 键查看进程实时监控文件访问事件:
# 安装
sudo apt install fatrace
# 监控所有磁盘活动
sudo fatrace
# 监控特定挂载点
sudo fatrace -m /home块层 I/O 追踪(高级):
# 追踪指定设备
sudo blktrace -d /dev/sda -o - | blkparse -i -
# 按进程分组显示
sudo blktrace -d /dev/sda -o - | blkparse -i - -f "%D %2c %8s %5T.%9t %5p %2a %3d\n"程**
创建一个简单的监控脚本:
#!/bin/bash
# monitor-io.sh
while true; do
clear
echo "=== 高 I/O 进程 TOP 10 ==="
ps -eo pid,comm,io --sort=-io | head -11
echo ""
echo "=== 磁盘统计 ==="
iostat -x 1 1 | tail -20
sleep 2
done更细粒度的分析:
# 安装
sudo apt install bpfcc-tools
# 追踪文件系统操作
sudo filetop
# 追踪块设备 I/O
sudo biosnoop
# 追踪 VFS 操作
sudo vfscount发现高 I/O:
iostat -x 1
# 查找 %util 高的设备找到相关进程:
sudo iotop -o
# 或
sudo lsof /dev/sdaX深入分析具体进程:
strace -p <PID> -e trace=read,write
# 或
/proc/<PID>/fd 查看打开的文件fatrace
实时监控文件访问sar -d 1
查看历史趋势fio
工具测试磁盘性能