必须使用iostat、iotop、dd和fio等工具组合监控与测试linux磁盘io:iostat查吞吐与瓶颈指标,iotop定位高io进程,dd测裸设备吞吐,fio模拟多场景负载。

如果您需要实时掌握Linux系统中磁盘的读写响应、请求排队深度及设备利用率等关键IO行为,则必须借助专业工具获取底层统计指标。以下是执行该任务的具体方法:
一、使用iostat查看全局磁盘IO统计
iostat命令提供基础设备级吞吐量与事务频率数据,适用于快速识别高负载设备。它默认输出CPU和磁盘综合信息,适合初次筛查。
1、确认sysstat包已安装,执行:yum install -y sysstat(CentOS/RHEL)或apt-get install -y sysstat(Debian/Ubuntu)。
2、运行基础命令查看当前一次快照:iostat。
3、以KB/s为单位、每2秒刷新一次、持续显示5次:iostat -k 2 5。
4、仅显示磁盘设备(排除CPU行):iostat -d -k。
二、使用iostat -x查看扩展IO性能指标
扩展模式(-x)输出关键瓶颈判断字段,包括%util(设备忙时百分比)和avgqu-sz(平均请求队列长度),是定位IO性能瓶颈的核心依据。
1、执行扩展统计命令:iostat -xk 1,每秒刷新一次,单位为KB。
2、重点观察以下两列值:%util长期高于80%表示设备持续高负载;avgqu-sz持续大于2(HDD)或大于1(SSD)表明I/O请求已在排队。
3、若仅关注某块盘(如sdb)及其分区,使用:iostat -xk 1 /dev/sdb。
4、查看所有块设备(含LVM逻辑卷),使用:iostat -xk 1 -p ALL(注意:-p与-x不可同时省略,-p ALL可共存于-x模式)。
三、使用iotop实时定位高IO进程
iotop可按进程或线程维度展示实时IO带宽占用,弥补iostat无法关联具体程序的缺陷,适用于快速锁定罪魁进程。
1、安装iotop:yum install -y iotop(CentOS/RHEL)或apt-get install -y iotop(Debian/Ubuntu)。
2、以root权限运行并仅显示活跃IO进程:sudo iotop -o。
3、启用PID显示(而非TID):按p键。
4、按IO带宽降序排列:按大写字母O键(Shift+o)。
5、刷新间隔设为1秒:sudo iotop -o -d 1。
四、使用dd命令进行直接IO吞吐测试
dd绕过页缓存执行裸设备读写,用于验证磁盘原始吞吐能力,结果反映物理层极限而非缓存加速效果。
1、测试顺序写性能(生成1GB文件,direct绕过缓存):dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct。
2、测试顺序读性能(从testfile读取,iflag=direct确保直通):dd if=testfile of=/dev/null bs=1M iflag=direct。
3、清除页面缓存避免干扰后续测试:echo 3 | sudo tee /proc/sys/vm/drop_caches。
4、重复执行三次取平均值,关注dd输出末尾的bytes/sec数值。
五、使用fio执行多场景IO压力测试
fio支持自定义I/O类型(随机/顺序)、读写比例、块大小、队列深度等参数,可模拟数据库、虚拟机等真实负载模式。
1、安装fio:yum install -y fio 或 apt-get install -y fio。
2、创建配置文件fio_randread.fio,内容如下:[global]\nfilename=/tmp/fio_test\nbs=4k\nioengine=libaio\ndirect=1\nruntime=60\ntime_based\n[rw-randread]\nrw=randread\niodepth=32。
3、执行随机读测试:fio fio_randread.fio。
4、执行4K随机写测试:fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=1G --runtime=60 --time_based /tmp/fio_test。
5、解析输出中的IOPS(io=值除以bs)、BW(bandwidth)、clat(完成延迟)三项核心指标。










