
我们在上一章中谈了磁盘的工作流程以及评价磁盘性能的几个典型指标,以及对这些指标做了简单的介绍和获取指标的工具。
今天我们对这些指标再重点谈一下,因为这些指标并不是孤立存在的,他们往往互相关联,而且同一种现象有时也需要好几种指标放在一起共同来判断。而且,除了这些表现整体性能的指标外,有时候我们还需要分析进程级别的I/O请求,来进一步分析问题产生的原因。
1、磁盘性能指标
简要回顾一下这几种指标:
使用率: 表示磁盘的繁忙程度,在一个采集周期处理I/O请求的时间百分比。
饱和度: 衡量的是磁盘队列的长度,即正在等待处理的I/O请求数量。
IOPS: 每秒的I/O操作次数,一般用来衡量磁盘处理请求的速度,特别对于大量小文件请求的业务时,这个值往往要求比较高。
吞吐量: 每秒的数据传输量,这个指标往往跟带宽存在着很大的关联。
响应时间: 一个I/O请求从发出到完成的时间,一般包含队列传输时间、队列等待时间还有磁盘处理时间。
这些指标的数值可以通过iostat工具来获取,那这些指标到底都有什么关联关系呢,我们分别来拆解一下。
-
使用率与饱和度: 当磁盘的使用率持续上升,甚至达到了100%,已经表明此时磁盘非常忙碌。这时再来新的请求,就有可能会进入排队状态,那饱和度的值就会急剧上升。但是反过来,如果磁盘处理能力比较弱或有故障了,出现突发的请求异常导致队列阻塞,使用率缺并一定非常高。
-
使用率与IOPS、吞吐量: 在磁盘的性能峰值极限之内,随着业务负载的升高,IOPS和吞吐量的值也会升高,伴随着使用率也会升高。当到达极限时,如果负载还在增加,IOPS和吞吐量的值不升反而可能会下降,因为请求产生排队或者发生不断重试,饱和度增加了。
-
响应时间与使用率、饱和度: 决定一个请求处理的足够快,必须满足网速足够快(传输时间短)、不需要排队(饱和度趋近0)、磁盘处理快(物理特性,固态盘>机械盘)。根据前文,如果使用率超过一定阈值,饱和度也会增加,从而导致响应时间急剧上升,业务直接表现就是变得非常卡顿。
-
IOPS与吞吐量: 对于单个I/O请求比较小,例如4K,可能会达到磁盘的IOPS极限,吞吐量并不高。同样,如果单个I/O请求比较大,到了吞吐量的极限,可能最大的限制因素就是带宽了。
所以,我们在看待这几个指标时,需要综合的判断,根据业务使用再总结一下:
当负载(IOPS和吞吐量)慢慢增加时,使用率平稳增加,饱和度基本不变;但当负载到达一定高度时,响应时间就有增加,饱和度也开始增加了;负载到达100%时,饱和度就会快速增加,响应时间急剧上升。
了解清楚整体的性能指标后,我们再来看一下进程级别的I/O,以及用哪些工具来查看。
2、进程级别I/O
一般查看进程I/O主要使用pidstat、iotop、/proc文件系统等。
bash
#Ubuntu系统安装pidstat、iotop
sudo apt install iotop
sudo apt install sysstat
#/proc是系统自带
1、使用 iotop -o -d 1 来实时观察线程的读写速度、IO等待时间百分比。
bash
Total DISK READ : 0.00 B/s | Total DISK WRITE : 499.55 K/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 436.22 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
27464 be/4 root 0.00 B/s 3.52 K/s 0.00 % 0.76 % qemu-system-x86_64 -name guest=i-oxxx5~ci.0,addr=0xd -msg timestamp=on [worker]
1792 be/3 root 0.00 B/s 66.84 K/s 0.00 % 0.01 % [jbd2/sda3-8]
913 be/4 root 0.00 B/s 182.93 K/s 0.00 % 0.00 % systemd-journald
** DISK READ/DISK WRITE: ** 进程的实时读写速度,单位可能是 B/s、K/s、M/s
** IO>: ** IO等待时间百分比,也就是等待 IO 完成的时间占总运行时间的百分比,这个值越低越好。
** SWAPIN: ** 从swap交换到物理内存的时间百分比
** TID: ** 线程ID号
** PRIO: ** IO优先级
2、使用 pidstat -d 1 来不间断观察进程的IO统计,包括每秒读取(kB_rd/s)、每秒写入(kB_wr/s)。
bash
root@node:~# pidstat -d 1
Linux 4.15.0-58-generic (cs1ahyper01n07) 11/13/2025 _x86_64_ (64 CPU)
10:12:05 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
10:12:06 PM 0 913 0.00 3.70 0.00 0 systemd-journal
10:12:06 PM 0 2598 0.00 155.56 3.70 0 cron
10:12:06 PM 0 4855 0.00 29.63 0.00 0 bkunifylogbeat
10:12:06 PM 104 11940 0.00 3.70 0.00 0 rsyslogd
10:12:06 PM 0 24244 0.00 7.41 0.00 0 qemu-system-x86
10:12:06 PM 0 48974 0.00 485.19 0.00 0 qemu-system-x86
PID:进程ID
kB_rd/s:每秒读取数据量(KB)
kB_wr/s:每秒写入数据量(KB)
kB_ccwr/s:每秒被取消的写入数据量(KB)
3、还可以看一下文件系统/proc,在 /proc/ /io 中查看。
bash
#例如:
cat /proc/123/io
# 输出说明:
rchar: 145678 # 读取的字符数(包括缓存)
wchar: 234567 # 写入的字符数(包括缓存)
syscr: 1234 # 读系统调用次数
syscw: 5678 # 写系统调用次数
read_bytes: 45678 # 实际物理读取的字节数
write_bytes: 123456 # 实际物理写入的字节数
cancelled_write_bytes: 12345 # 取消的写入字节数
需要注意的是这个数据统计的是从进程启动之后累计的值,重启会重新计数。
有了这些观测数据,我们才能更好的针对从磁盘I/O整体到更细化的进程级I/O局部,清晰的观察性能的变化。
🔥运维干货分享
- 软考高级系统架构设计师备考学习资料
- 软考中级数据库系统工程师学习资料
- 软考高级网络规划设计师备考学习资料
- 软考高级系统规划与管理师学习资料
- 软考中级系统集成项目管理师学习资料
- Kubernetes CKA认证学习资料分享
- AI大模型学习资料合集
- PuTTY中文版安装包
- MobaXterm中文版安装包
- pinginfoview网络诊断工具中文版
- Xshell、Xsftp、Xmanager中文版安装包
- 毕业设计高质量毕业答辩 PPT 模板分享
- IT行业工程师面试简历模板分享
__
外链图片转存中...(img-wuvuEw3i-1764470444595)