记一次生产服务器磁盘I/O性能瓶颈与负载过高分析与处理

磁盘I/O性能瓶颈与服务器负载过高排查实战:DELL PERC H330 Mini RAID卡性能优化全记录

一、问题与症状

1.1 性能问题突显

这一是台生产服务器,业务开发人员反应系统经常报超时错误,遂使用top 命令查看发现服务器负载高平均在8 左右,峰值达到30。执行一条ls ll top等常用命令都卡顿。

top命令 按1 查看每个cpu 发现占用都不高,最高才10%,大量的cpu处理于空闲。

于是猜测是IO导致 或 CPU上下文频繁切换

1.2 关键症状表现

通过iostat -dx 1命令捕获到以下严重问题:

bash 复制代码
[root@localhost ~]# iostat -dx 1

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain) 2025年10月14日 x86_64 (80 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.65 1.60 6.69 73.67 42.99 1754.65 44.74 0.03 0.33 10.07 3.29 1.50 12.08 dm-0 0.00 0.00 0.07 0.13 4.44 0.90 53.33 0.00 22.98 8.77 31.16 10.18 0.20 dm-1 0.00 0.00 6.82 6.87 27.28 27.47 8.00 0.26 18.75 10.30 27.13 2.93 4.01 dm-2 0.00 0.00 0.45 68.28 11.27 1726.29 50.56 0.15 2.13 7.37 2.10 1.34 9.24 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 34.00 0.00 640.00 37.65 0.08 2.38 0.00 2.38 1.74 5.90 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 34.00 0.00 640.00 37.65 0.08 2.38 0.00 2.38 1.71 5.80 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 27.00 0.00 640.00 47.41 0.14 5.00 0.00 5.00 3.26 8.80 dm-0 0.00 0.00 0.00 3.00 0.00 12.00 8.00 0.03 9.00 0.00 9.00 5.00 1.50 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 24.00 0.00 628.00 52.33 0.11 4.46 0.00 4.46 3.21 7.70 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 2.00 196.00 8.00 6520.00 65.94 0.98 4.96 5.50 4.95 0.35 6.90 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 2.00 0.00 8.00 0.00 8.00 0.01 5.50 5.50 0.00 5.50 1.10 dm-2 0.00 0.00 0.00 196.00 0.00 6520.00 66.53 0.97 4.95 0.00 4.95 0.31 6.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 63.00 0.00 2068.00 65.65 1.53 24.33 0.00 24.33 2.35 14.80 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 63.00 0.00 2068.00 65.65 1.53 24.35 0.00 24.35 2.37 14.90 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 1.00 120.00 4.00 1276.00 21.16 0.33 2.70 5.00 2.68 1.91 23.10 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 1.00 0.00 4.00 0.00 8.00 0.01 5.00 5.00 0.00 5.00 0.50 dm-2 0.00 0.00 0.00 120.00 0.00 1276.00 21.27 0.32 2.67 0.00 2.67 1.90 22.80 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 268.00 0.00 3036.00 22.66 15.90 59.31 0.00 59.31 1.60 43.00 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 268.00 0.00 3036.00 22.66 15.89 59.31 0.00 59.31 1.60 42.80 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 21.00 0.00 536.00 51.05 0.05 2.24 0.00 2.24 2.00 4.20 dm-0 0.00 0.00 0.00 2.00 0.00 8.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 19.00 0.00 528.00 55.58 0.05 2.47 0.00 2.47 2.21 4.20 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 8.00 80.00 32.00 2808.00 64.55 0.60 6.83 8.00 6.71 1.12 9.90 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 8.00 0.00 32.00 0.00 8.00 0.06 8.00 8.00 0.00 8.00 6.40 dm-2 0.00 0.00 0.00 80.00 0.00 2808.00 70.20 0.54 6.70 0.00 6.70 0.49 3.90 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 53.00 0.00 456.00 17.21 1.24 23.38 0.00 23.38 2.25 11.90 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 53.00 0.00 456.00 17.21 1.24 23.38 0.00 23.38 2.25 11.90 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 74.00 0.00 1304.00 35.24 0.17 2.32 0.00 2.32 2.19 16.20 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 74.00 0.00 1304.00 35.24 0.17 2.30 0.00 2.30 2.16 16.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.00 0.00 30.00 0.00 948.00 63.20 0.04 1.50 0.00 1.50 1.27 3.80 dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 dm-2 0.00 0.00 0.00 30.00 0.00 948.00 63.20 0.04 1.50 0.00 1.50 1.27 3.80

发现灾难性指标:

  • 磁盘利用率100%%util指标达到100.30%,磁盘完全饱和

  • 严重队列堆积avgqu-sz队列长度高达146-148,正常值应小于5

  • 响应时间恶化await等待时间从正常值<10ms恶化到260+ms

  • 写入压力巨大w/s达到852次/秒,且为小文件写入模式

具体性能数据对比:

性能指标 正常范围 实际观测值 严重程度
%util < 70% 100.30% 🔴 严重
avgqu-sz < 5 146-148 🔴 严重
await < 20ms 160-263ms 🔴 严重
avgrq-sz 16-64 8.00-8.25 🟡 警告

以下是 iostat -dx 1 命令输出各列详细解释的表格:

名称 含义 解释 正常值
rrqm/s 每秒合并的读请求数 操作系统将多个相邻读请求合并为一个以提高效率 通常较低,高值表示读请求碎片化
wrqm/s 每秒合并的写请求数 写请求合并机制,提高写入效率 根据工作负载变化,通常比rrqm/s高
r/s 每秒完成的读请求数 读IOPS(每秒读I/O操作数) SSD:数千,HDD:通常几百
w/s 每秒完成的写请求数 写IOPS(每秒写I/O操作数) 依赖磁盘类型和工作负载
rkB/s 每秒读取数据量(KB) 读吞吐量,计算公式:(读取扇区数×扇区大小)/1024 依赖磁盘带宽和业务需求
wkB/s 每秒写入数据量(KB) 写吞吐量,重要的性能监控指标 依赖磁盘带宽和业务需求
avgrq-sz 平均请求大小(扇区) 每个I/O请求的平均大小,反映I/O模式 小值(<16):小文件I/O;大值(>32):顺序大文件I/O
avgqu-sz 平均队列长度 等待处理的I/O请求数量 <1:良好;1-5:轻度排队;>5:严重排队;>10:紧急问题
await 平均I/O响应时间(ms) 每个I/O请求的平均处理时间(排队+服务) <10ms:优秀;10-20ms:良好;20-50ms:警告;>50ms:严重问题
r_await 读请求平均响应时间(ms) 读请求的平均处理时间 关注读操作性能,标准同await
w_await 写请求平均响应时间(ms) 写请求的平均处理时间 通常比读操作慢,标准同await
svctm 平均服务时间(ms) 磁盘完成一个I/O请求所需时间(不含排队) SSD:0.1-2ms;HDD:2-10ms(新内核中可能不准确)
%util 设备利用率百分比 磁盘处理I/O的时间占比 <50%:良好;50%-70%:警告;70%-100%:瓶颈;100%:完全饱和

性能诊断黄金三角:

  1. %util > 70% → 设备繁忙

  2. avgqu-sz > 5 → 请求排队

  3. await > 20ms → 响应缓慢

工作负载特征指标:

  • r/s + w/s → I/O压力大小

  • avgrq-sz → I/O模式(随机/顺序)

  • rkB/s + wkB/s → 数据传输量

这个表格提供了完整的磁盘I/O性能监控指标体系,帮助快速定位和解决性能瓶颈问题

1.3 系统环境信息

  • 操作系统:CentOS 7.9

  • 内核版本:3.10.0-1160.el7.x86_64

  • RAID卡:DELL PERC H330 Mini

  • CPU:80 cpus Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz

  • 磁盘容量:3.99TB

  • 文件系统:XFS + FAT

二、IO分析过程

2.1 初步排查与定位

首先使用基础命令进行问题定位:

bash

复制代码
# 查看磁盘设备信息
lsscsi -s
[0:2:0:0]    disk    DELL     PERC H330 Mini   4.30  /dev/sda   3.99TB

# 检查系统日志
dmesg | grep -i sda

关键发现:

  • 磁盘写入缓存被禁用:Write cache: disabled, read cache: disabled

  • FAT文件系统未正常卸载,可能存在文件系统损坏

  • 设备通过DELL PERC H330 Mini RAID卡管理

2.2 深入性能分析

通过iostat -dx详细指标分析,发现以下问题特征:

I/O模式分析:

  • 写入密集型负载,读写比例严重失衡

  • 大量小文件写入(avgrq-sz = 8KB)

  • 设备映射层dm-1和dm-2承担主要压力

瓶颈定位:

  • 物理磁盘sda利用率100%

  • 设备映射dm-1的写入IOPS达到854次/秒

  • 设备映射dm-2的响应时间达到379ms

2.3 根本原因推断

基于性能数据和工作负载特征,推断可能的原因:

  1. 硬件层面:RAID卡无缓存 + 磁盘缓存禁用

  2. 应用层面:大量小文件持续写入,可能是数据库事务或日志写入

  3. 配置层面:系统I/O参数未优化,缺乏必要的缓存机制

2.4 RAID卡特性分析

DELL PERC H330 Mini的关键特性:

特性 规格 对性能的影响
控制器级别 入门级硬件RAID 功能有限
板载缓存 写入性能受限
支持RAID级别 0,1,5,10 灵活性一般
缓存策略 默认Write-Through 数据安全优先

三、IO处理过程

3.1 缓存启用尝试

deepseek推荐使用smartctl:

bash

复制代码
smartctl -s wcache,on /dev/sda

结果:Smartctl open device: /dev/sda failed: DELL or MegaRaid controller, please try adding '-d megaraid,N'

smartctl -d scsi -i /dev/sda

复制代码
SMART support is:     Unavailable - device lacks SMART capability.

发现:

  • DELL PERC H330 Mini虚拟化的磁盘不支持SMART功能

  • 无法通过smartctl管理磁盘缓存

  • 需要在RAID卡层面或操作系统层面进行优化

只能使用 MegaCli 命令 (需要安装 下载连接 https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/8-07-14_MegaCLI.zip

3.3 系统层面优化实施

服务器RAID控制器没有安装电池备份模块(BBU)既然无法在硬件层面启用缓存,转向系统级优化:

开启磁盘缓存(关键命令)

./MegaCli64 -LDSetProp -EnDskCache -Lall -aALL

执行以下命令,确认 "Disk Write Cache " 的状态已变为 "Enable":

./MegaCli64 -LDGetProp -DskCache -LALL -aALL

3.4 验证

执行完上述命令后,IO性能得到了解决:

bash 复制代码
[root@localhost ~]# iostat -dx 1

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain) 2025年10月16日 x86_64 (80 CPU)

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

sda 0.65 1.60 6.76 73.88 43.30 1757.74 44.67 0.06 0.79 10.05 3.72 1.51 12.15

dm-0 0.00 0.00 0.07 0.13 4.47 0.92 52.59 0.00 22.72 8.73 30.56 10.07 0.21

dm-1 0.00 0.00 6.87 6.90 27.49 27.58 8.00 0.28 20.00 10.30 29.67 2.95 4.06

dm-2 0.00 0.00 0.47 68.46 11.34 1729.24 50.51 0.16 2.38 7.22 2.35 1.34 9.27

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

sda 0.00 0.00 34.00 59.00 136.00 532.00 14.37 0.27 2.88 7.09 0.46 2.77 25.80

dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

dm-1 0.00 0.00 33.00 0.00 132.00 0.00 8.00 0.24 7.30 7.30 0.00 7.21 23.80

dm-2 0.00 0.00 0.00 59.00 0.00 532.00 18.03 0.03 0.49 0.00 0.49 0.41 2.40

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

sda 0.00 0.00 4.00 47.00 16.00 447.00 18.16 0.09 1.69 9.25 1.04 1.53 7.80

dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

dm-1 0.00 0.00 3.00 0.00 12.00 0.00 8.00 0.02 7.00 7.00 0.00 7.00 2.10

dm-2 0.00 0.00 1.00 47.00 4.00 447.00 18.79 0.07 1.35 16.00 1.04 1.25 6.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

sda 0.00 0.00 8.00 22.00 32.00 356.00 25.87 0.13 4.47 11.75 1.82 4.13 12.40

dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

dm-1 0.00 0.00 8.00 0.00 32.00 0.00 8.00 0.09 11.75 11.75 0.00 11.75 9.40

dm-2 0.00 0.00 0.00 22.00 0.00 356.00 32.36 0.04 1.82 0.00 1.82 1.41 3.10

预期改善效果:

  • await:从260ms+下降到10ms以下

  • avgqu-sz:从146+减少到5以下

  • %util:从100%下降到20%左右

  • 系统整体响应时间显著改善

3.6 经验总结

教训与建议:

在采购硬件时考虑RAID卡的缓存配置(BBU必须的)

四、CPU上下文切换高分析过程

bash

bash 复制代码
[root@localhost download]# free -g
              total        used        free      shared  buff/cache   available
Mem:            125         110           0           0          14          14
Swap:            15          10           4
[root@localhost download]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 7  5 11439720 445524     28 15114140    0    0     1    22    0    0  5  2 93  0  0
 7  1 11438696 445044     28 15114172  820    0   820   680 46506 66224  7  2 88  2  0
10  2 11438184 446608     28 15114184  828    0   828  3684 49295 62714  6  2 90  2  0
13  1 11437672 445308     28 15114256  552    0   552   880 67147 84565  6  2 90  2  0
 5  0 11437672 451720     28 15114268   64    0    64 28960 49561 50995  3  2 94  1  0

发现服务器内存基本耗尽,大量使用交换内存。

1. 进程队列问题严重

  • 运行队列(r): 8, 12, 3, 2, 5 - 经常超过CPU核心数,表明CPU资源紧张

  • 阻塞队列(b): 4, 0, 0, 1, 0 - 存在I/O阻塞的进程

2. 内存压力巨大

  • swpd: 11,468,128 - 11GB的交换空间被使用,说明物理内存严重不足

  • free: 仅约450MB空闲内存

  • cache: 15GB的缓存,系统正在尽力利用内存

3. 上下文切换确认

  • cs: 76,585, 36,980, 39,786, 36,973 - 与pidstat结果一致,上下文切换确实很高

  • in: 中断数也较高,52,208, 23,937等

4. I/O活动

  • so: 584 - 有数据从swap写出到磁盘

  • bi/bo: 有块设备输入输出活动

5. 虚拟机占用分析

这台服务器上装了3个虚拟机:

root@localhost download\]# virsh list 内存分别配置了:80G 32G 8G **进入第一台80G虚拟机查看,内存闲置了45G** ## 五、CPU上下文切换处理过程 **执行命令**: ```bash [root@platform ~]# lsmod | grep virtio_balloon virtio_balloon 18015 0 virtio_ring 22991 3 virtio_pci,virtio_balloon,virtio_console virtio 14959 3 virtio_pci,virtio_balloon,virtio_console ``` 气球驱动已加载,但可能没有正确配置或启用。 **执行内存调整命令(关键步骤)** ```bash bash virsh setmem host1 50G --live virsh setmaxmem host1 50G --config ```

相关推荐
携欢14 小时前
PortSwigger靶场之CSRF where token is tied to non-session cookie通关秘籍
运维·服务器·前端
BothSavage14 小时前
Ubuntu-8卡H20服务器升级nvidia驱动+cuda版本
linux·服务器·ubuntu·gpu·nvidia·cuda·nvcc
K_i13415 小时前
OSI七层模型:从原理到实战
运维·服务器·网络
信创工程师-小杨15 小时前
国产银河麒麟SP1桌面版本启动ssh服务报错解决办法
linux·服务器·ssh
jixunwulian15 小时前
5G+AIoT智赋,AI电力加密边缘网关智慧电网数字化运维解决方案
运维·人工智能·5g
小小小糖果人16 小时前
Linux云计算基础篇(25)-DNS配置
linux·运维·云计算
TIANE-Kimmy16 小时前
VS code定时任务设置(mac os)
linux·运维·服务器
panshiyangmaye16 小时前
RHCSA作业1
linux·运维·服务器