Linux磁盘性能的指标介绍
dbasql
专注于分享最有价值的互联网技术干货
Linux磁盘性能的指标介绍
在 Linux 系统中,磁盘性能指标是评估存储子系统性能的关键依据,主要用于判断磁盘 I/O 是否存在瓶颈、定位性能问题根源(如吞吐量不足、响应延迟过高、队列积压等)。以下是核心指标的详细介绍:
一、基础指标分类
1. 吞吐量(Throughput)
定义:单位时间内磁盘传输的数据量,反映磁盘的最大数据传输能力。
单位:MB/s(兆字节每秒)或 KB/s(千字节每秒)。
相关指标:
读吞吐量(Read Throughput):每秒读取的数据量(如 rkB/s、MB_read/s)。
写吞吐量(Write Throughput):每秒写入的数据量(如 wkB/s、MB_write/s)。
工具:
iostat -d -x:查看 rkB/s 和 wkB/s(转换为 MB 需除以 1024)。
vmstat -d:显示磁盘总吞吐量。
dstat -d:实时统计各磁盘读写速率。
应用场景:顺序读写场景(如文件复制、大数据处理)更关注吞吐量,机械硬盘(HDD)通常低于 200MB/s,固态硬盘(SSD)可达数 GB/s。
2. IOPS(Input/Output Operations Per Second)
定义:每秒完成的 I/O 操作次数,分为随机 IO 和顺序 IO,反映磁盘处理小数据块的能力。
单位:次 / 秒(ops/s)。
相关指标:
读 IOPS(Read IOPS):每秒读操作次数(如 r/s)。
写 IOPS(Write IOPS):每秒写操作次数(如 w/s)。
工具:
iostat -d:直接显示 r/s 和 w/s。
iotop:按进程统计实时 IOPS。
sysstat 工具包中的 pidstat -d:追踪特定进程的 IOPS。
特点:随机 IO(如数据库事务)对 IOPS 要求高,HDD 通常为 100-200 IOPS,SSD 可达数万甚至百万 IOPS。
3. 响应时间(Response Time)
定义:从发出 I/O 请求到完成操作的总时间,包括队列等待时间和实际处理时间。
单位:毫秒(ms)。
相关指标:
平均响应时间(Average Response Time, await):每个 I/O 请求的平均处理时间(包括等待时间)。
服务时间(Service Time, svctm):磁盘实际处理 I/O 的时间(不包括等待时间,仅机械硬盘有效,SSD 因无寻道时间可忽略)。
工具:
iostat -x:查看 await 和 svctm(机械硬盘中 await ≈ 队列等待时间 + svctm)。
fio 基准测试:通过负载模拟测量响应时间分布(如 95%、99% 延迟)。
注意:高并发场景下,await 显著高于 svctm 表明队列积压严重。
4. 利用率(Utilization)
定义:磁盘忙于处理 I/O 的时间占比(非空闲时间),反映磁盘的繁忙程度。
单位:百分比(%)。
指标:%util(或 utilization)。
工具:
iostat -x:直接显示 %util(计算方式:(读操作时间 + 写操作时间)/总时间)。
vmstat -d:显示磁盘活动时间百分比。
阈值:
机械硬盘:长期高于 70% 可能存在瓶颈(因寻道和旋转延迟)。
SSD:可承受更高利用率(通常低于 90% 时性能稳定)。
误区:%util 接近 100% 时,磁盘可能饱和,但需结合队列长度(avgqu-sz)判断是否为瓶颈。
5. 队列长度(Queue Length)
定义:等待处理的 I/O 请求数量,反映磁盘的负载压力。
相关指标:
平均队列长度(Average Queue Length, avgqu-sz):一段时间内等待处理的 I/O 请求平均值。
即时队列长度:通过 cat /proc/diskstats 或 dmesg 查看瞬时队列(较少用,平均指标更有意义)。
工具:
iostat -x:显示 avgqu-sz。
sysstat 记录的历史数据(如 /var/log/sysstat/ 中的文件)。
意义:持续大于磁盘能处理的并发数(如 HDD 通常为 2-4,SSD 可达数百)时,会导致响应时间急剧增加。
6. 请求大小(Request Size)
定义:每个 I/O 请求的平均数据量,反映工作负载特性(小文件 vs 大文件)。
单位:扇区(512 字节)或 KB/MB。
指标:avgrq-sz(平均请求大小,以扇区为单位)。
工具:iostat -x 显示 avgrq-sz,转换为 KB 需乘以 512 并除以 1024。
应用:小请求(如 4KB)对应随机 IO(数据库),大请求(如 1MB)对应顺序 IO(文件传输)。
二、关键工具及输出解析
1. iostat(最核心工具)
iostat -d -x 1 # 每秒输出一次磁盘详细指标
主要字段:
rrqm/s/wrqm/s:每秒合并的读 / 写请求数(内核合并相邻块请求以提升效率,SSD 可忽略)。
r/s/w/s:每秒完成的读 / 写操作数(IOPS)。
rkB/s/wkB/s:每秒读 / 写数据量(吞吐量)。
avgrq-sz:平均请求大小(扇区)。
avgqu-sz:平均等待队列长度(值越高,积压越严重)。
await:平均响应时间(ms,包括等待和处理时间)。
svctm:平均服务时间(ms,仅机械硬盘有效)。
%util:磁盘利用率(长期 > 70% 需警惕)。
2. vmstat(系统级统计)
vmstat -d # 显示磁盘整体统计
vmstat -n 1 # 每秒显示一次系统IO指标(如`bi`/`bo`为块设备读写量)
bi:每秒从块设备读取的数据块数(512 字节 / 块)。
bo:每秒写入块设备的数据块数。
3. iotop(实时进程级 IO 监控)
iotop -o # 仅显示有IO活动的进程
可查看进程的读写速率、IOPS,定位异常占用 IO 的进程。
4. /proc/diskstats(原始统计数据)
cat /proc/diskstats # 输出各磁盘的详细计数器
字段顺序(以sda为例):
8 0 sda 12345 678 9012 345 6789 1011 12345 67 0 123 456
第 3-6 列:读操作相关(完成次数、合并次数、扇区数、耗时)。
第 7-10 列:写操作相关(同上)。
三、实战场景与指标关联
1. 判断磁盘瓶颈
场景 1:%util 高(>80%)且 avgqu-sz 持续 > 0 → 磁盘繁忙,可能存在瓶颈。
场景 2:await 高(如 > 50ms)但 %util 低 → 可能存在偶发延迟(如 SSD 垃圾回收、HDD 寻道异常)。
场景 3:r/s/w/s 高但 rkB/s/wkB/s 低 → 大量小文件随机 IO(如数据库日志)。
2. 区分硬件类型影响
HDD:受限于机械结构,svctm 较高(5-15ms),%util 超过 70% 后性能下降明显。
SSD:svctm 接近 0(无寻道时间),瓶颈通常在吞吐量或队列深度,%util 可长期高于 90%。
3. 优化方向
高 IOPS 场景(数据库):关注 r/s/w/s、await,使用 SSD 或 RAID 0 提升并发。
高吞吐量场景(大数据):关注 rkB/s/wkB/s,使用顺序读写、大缓冲区。
队列积压:减少并发请求(如优化应用逻辑)、增加磁盘容量或更换高性能存储。
上述指标,可准确定位磁盘性能问题(如延迟、瓶颈、配置不合理),并结合工具(如fio做基准测试、blktrace追踪 IO 路径)进一步排查。日常监控建议结合cron定时采集iostat数据,或使用 Prometheus+Grafana 实现可视化预警。
posted on
2025-04-30 09:03
数据库那些事儿
阅读(445)
评论(0)
收藏
举报
刷新页面返回顶部