Linux性能调优 再谈磁盘性能指标和进程级IO

我们在上一章中谈了磁盘的工作流程以及评价磁盘性能的几个典型指标,以及对这些指标做了简单的介绍和获取指标的工具。

今天我们对这些指标再重点谈一下,因为这些指标并不是孤立存在的,他们往往互相关联,而且同一种现象有时也需要好几种指标放在一起共同来判断。而且,除了这些表现整体性能的指标外,有时候我们还需要分析进程级别的I/O请求,来进一步分析问题产生的原因。

1、磁盘性能指标

简要回顾一下这几种指标:

使用率: 表示磁盘的繁忙程度,在一个采集周期处理I/O请求的时间百分比。
饱和度: 衡量的是磁盘队列的长度,即正在等待处理的I/O请求数量。
IOPS: 每秒的I/O操作次数,一般用来衡量磁盘处理请求的速度,特别对于大量小文件请求的业务时,这个值往往要求比较高。
吞吐量: 每秒的数据传输量,这个指标往往跟带宽存在着很大的关联。
响应时间: 一个I/O请求从发出到完成的时间,一般包含队列传输时间、队列等待时间还有磁盘处理时间。

这些指标的数值可以通过iostat工具来获取,那这些指标到底都有什么关联关系呢,我们分别来拆解一下。

  1. 使用率与饱和度: 当磁盘的使用率持续上升,甚至达到了100%,已经表明此时磁盘非常忙碌。这时再来新的请求,就有可能会进入排队状态,那饱和度的值就会急剧上升。但是反过来,如果磁盘处理能力比较弱或有故障了,出现突发的请求异常导致队列阻塞,使用率缺并一定非常高。

  2. 使用率与IOPS、吞吐量: 在磁盘的性能峰值极限之内,随着业务负载的升高,IOPS和吞吐量的值也会升高,伴随着使用率也会升高。当到达极限时,如果负载还在增加,IOPS和吞吐量的值不升反而可能会下降,因为请求产生排队或者发生不断重试,饱和度增加了。

  3. 响应时间与使用率、饱和度: 决定一个请求处理的足够快,必须满足网速足够快(传输时间短)、不需要排队(饱和度趋近0)、磁盘处理快(物理特性,固态盘>机械盘)。根据前文,如果使用率超过一定阈值,饱和度也会增加,从而导致响应时间急剧上升,业务直接表现就是变得非常卡顿。

  4. 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局部,清晰的观察性能的变化。

🔥运维干货分享




__

外链图片转存中...(img-wuvuEw3i-1764470444595)

相关推荐
QYR-分析5 分钟前
26.2% 高增!场内及园区无人物流车,厂内短驳自动化的 L4 货运载体
运维·自动化
熊猫钓鱼>_>7 分钟前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
用户83514140494914 分钟前
把日志和寄存器值喂给AI做故障定位,我的实际问法
linux·ubuntu
java_logo18 分钟前
Docker 部署 DPanel:轻松搭建轻量容器管理平台
运维·docker·容器·podman·容器管理·dpanel·轩辕镜像
时间售卖铺26 分钟前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle
分布式存储与RustFS33 分钟前
CI 老被 Docker Hub 的 429 卡住,自建 Registry 把镜像搬进内网
运维·docker·开源·镜像仓库·对象存储·ci·rustfs
Ruiery38 分钟前
Linux 6.6内核内存管理深度解析(十七):vmalloc — 内核要“虚拟连续“就够:物理页逐个凑,页表来连
linux·运维·服务器
pt104340 分钟前
Cisco设备网络安全系列-19:网络安全事件驱动与调整
运维·网络
Escalating_xu44 分钟前
【Linux 网络编程】ARP 的具体过程与 ARP 欺骗:一条 IP → MAC 映射,怎样改变数据的去向?
linux·网络·tcp/ip
sxgzzn1 小时前
如何利用无人机提升光伏巡检效率?
运维·重构·无人机·开关柜局放在线监测·光伏运维管理系统