Linux磁盘IO分析

xeonds

2026.6.24 15:04:43

在 Linux 下分析磁盘 I/O 并定位具体程序,可以使用以下方法:

1. 使用 iotop(最直观)

实时查看每个进程的磁盘 I/O:

# 安装
sudo apt install iotop  # Debian/Ubuntu
sudo yum install iotop  # CentOS/RHEL

# 运行
sudo iotop
# 或显示非交互模式
sudo iotop -o  # 只显示有 I/O 的进
程

2. 使用 pidstat

查看特定进程或所有进程的 I/O 统计:

# 安装 sysstat 包
sudo apt install sysstat

# 查看所有进程的 I/O
pidstat -d 1

# 查看特定 PID 的 I/O
pidstat -d -p <PID> 1

3. 使用 iostat + lsof 组合

先找到高 I/O 的设备,再定位进程:

# 查看磁盘 I/O 统计
iostat -x 1

# 找到使用该磁盘的进程
lsof /dev/sda1  # 替换为你的磁盘设备

4. 使用 /proc 文件系统

直接在 /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

5. 使用 atop

更全面的系统监控工具:

sudo apt install atop
sudo atop
# 按 d 键查看磁盘 I/O
# 按 p 键查看进程

6. 使用 fatrace

实时监控文件访问事件:

# 安装
sudo apt install fatrace

# 监控所有磁盘活动
sudo fatrace

# 监控特定挂载点
sudo fatrace -m /home

7. 使用 blktrace/blkparse

块层 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"

8. **实用技巧:监控高 I/O 进

程**

创建一个简单的监控脚本:

#!/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

9. 使用 bcc-tools(BPF 工具)

更细粒度的分析:

# 安装
sudo apt install bpfcc-tools

# 追踪文件系统操作
sudo filetop

# 追踪块设备 I/O
sudo biosnoop

# 追踪 VFS 操作
sudo vfscount

快速定位步骤:

  1. 发现高 I/O:

    iostat -x 1
    # 查找 %util 高的设备
  2. 找到相关进程:

    sudo iotop -o
    # 或
    sudo lsof /dev/sdaX
  3. 深入分析具体进程:

    strace -p <PID> -e trace=read,write
    # 或
    /proc/<PID>/fd 查看打开的文件

常见问题处理: