Blog Details

  • Home  
  • Linux磁盘性能的指标介绍

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)

收藏

举报

刷新页面返回顶部