磁盘I/O是服务器常见性能瓶颈,表现为应用响应缓慢、负载升高但CPU利用率低。排查需要从监控指标入手,定位瓶颈类型(吞吐量瓶颈或IOPS瓶颈),再通过基准测试验证硬件能力上限。
iostat工具监控磁盘I/O指标
iostat是sysstat工具包中的I/O监控命令,提供设备级I/O统计:
# 安装sysstat
yum install -y sysstat # CentOS/RHEL
apt install -y sysstat # Ubuntu/Debian
# 每2秒采集一次,输出扩展信息
iostat -dxm 2
# 关键输出字段
# %util - 设备利用率,超过80%表示接近饱和
# await - I/O平均等待时间(ms),超过20ms需关注
# r/s w/s - 每秒读写IOPS
# rkB/s wkB/s - 每秒读写吞吐量(KB)
# aqu-sz - I/O队列深度,持续>1表示排队
实际排查时关注三个信号:
%util持续高于80%且await超过10ms,磁盘处理能力达上限aqu-sz持续大于1,I/O请求在队列中积压- CPU的
iowait百分比持续超过20%,进程大量时间等待I/O完成
常见I/O瓶颈特征与定位方法
通过/proc/diskstats和blktrace进一步定位I/O来源:
# 查看哪个进程在产生I/O
iotop -oP
# 使用blktrace抓取块设备I/O事件
blktrace -d /dev/sda -o - | blkparse -i -
# 分析I/O模式(随机/顺序)
iostat -x 1 | grep sda
# r/s和w/s接近但rkB/s/wkB/s很低 - 小块随机I/O(数据库场景)
# r/s低但rkB/s高 - 大块顺序读(日志分析场景)
区分瓶颈类型:
- IOPS瓶颈:随机小IO场景(如数据库),关注r/s+w/s是否达到磁盘规格上限
- 吞吐量瓶颈:顺序大IO场景(如备份),关注rkB/s+wkB/s是否达到带宽上限
- 延迟瓶颈:await偏高但util不高,可能是存储链路问题(如网络存储)
fio基准测试配置与结果分析
fio(Flexible I/O Tester)是存储性能基准测试工具,可模拟不同I/O负载模式:
# 随机读写测试(模拟数据库负载)
[global]
ioengine=libaio
direct=1
runtime=60
time_based
group_reporting
[randread]
filename=/dev/nvme0n1
rw=randread
bs=4k
iodepth=32
numjobs=1
[randwrite]
filename=/dev/nvme0n1
rw=randwrite
bs=4k
iodepth=32
numjobs=1
# 顺序读写测试(模拟日志/备份场景)
[seqread]
filename=/dev/nvme0n1
rw=read
bs=1m
iodepth=16
numjobs=1
执行测试:
fio rand_test.fio --output-format=json > fio_result.json
# 关键结果指标
# iops - 每秒I/O操作数
# bw - 带宽(MB/s)
# clat - 完成延迟分布(p99/p999)
# slat - 提交延迟
测试结果与磁盘规格对比,判断硬件是否达标。NVMe SSD随机4K读写IOPS应在10万以上,SATA SSD在5-10万,机械硬盘在100-200。
I/O调度策略与内核参数调优
# 查看当前I/O调度器
cat /sys/block/sda/queue/scheduler
# NVMe SSD建议使用none(绕过调度器,减少延迟)
echo none > /sys/block/nvme0n1/queue/scheduler
# SATA SSD建议使用mq-deadline
echo mq-deadline > /sys/block/sda/queue/scheduler
# 调整队列深度
echo 256 > /sys/block/sda/queue/nr_requests
# 调整脏页比例(减少写缓存积压)
sysctl -w vm.dirty_ratio=10
sysctl -w vm.dirty_background_ratio=5
# 关闭透明大页(数据库场景需要)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
I/O调优需要结合实际负载场景,数据库类应用优先降低延迟(none调度器+direct IO),文件服务类应用优先提升吞吐量(readahead预读+页面缓存)。修改内核参数后在测试环境验证,避免直接在生产环境操作。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-ci-pan-io-xing-neng-ping-jing-pai-cha-iostat-jian/