当前位置: 首页 > news >正文

记一次生产服务器磁盘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命令捕获到以下严重问题:

[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< 5146-148🔴 严重
await< 20ms160-263ms🔴 严重
avgrq-sz16-648.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性能得到了解决:

[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

[root@localhost download]# free -gtotal        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 st7  5 11439720 445524     28 15114140    0    0     1    22    0    0  5  2 93  0  07  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  05  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上下文切换处理过程

执行命令

[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

气球驱动已加载,但可能没有正确配置或启用。

执行内存调整命令(关键步骤)

bashvirsh setmem host1 50G --live
virsh setmaxmem host1 50G --config

http://www.dtcms.com/a/490085.html

相关文章:

  • MEMS加速度计深度解析:从智能手机到结构健康监测
  • LLMs-from-scratch(dataloader)
  • 兴义哪有做网站婚纱影楼网站源码
  • C++_394_tableWidget控件,两种模式,1、行显示模式 2、网格显示模式
  • MyBatis拦截器实现saas租户同库同表数据隔离
  • 求n以内最大的k个素数以及它们的和
  • 手机 网站建设在线自动取名网站怎么做
  • PHP电动汽车租赁管理系统-计算机毕业设计源码35824
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十二)Python3编程之python基础
  • 大型网站怎样做优化PHP营销推广的主要方法
  • 【泛3C篇】AI深度学习在手机前/后摄像头外观缺陷检测应用方案
  • 建设网站需要申请网站建设与管理专业好找工作吗
  • 绿色在线网站模板下载工具别人做的网站不能用怎么办
  • Initiater for mac 小巧的菜单栏OCR工具
  • ntfs可以用在mac上吗?3 种实用方案,解决Mac与NTFS硬盘兼容问题
  • 数据结构——二十、树与森林的遍历
  • 洛杉矶服务器常见问题汇总与解决方案大全
  • Linux云计算基础篇(27)-NFS网络文件系统
  • Mac安装使用Gradle
  • 夜莺监控设计思考(二)边缘机房架构思考
  • AI+大数据时代:时序数据库的架构革新与生态重构
  • 【记录】MAC本地微调大模型(MLX + Qwen2.5)并利用Ollama接入项目实战
  • wordpress 导购站模板接私活app有哪些平台
  • 有哪些网站可以做推广十大奢侈品牌logo图片
  • 服务注册 / 服务发现 - Eureka
  • 2025机器人自动化打磨抛光设备及汽车零件打磨新技术10月应用解析
  • bk7258 libzip崩溃之解决
  • 【Android】【底层机制】组件生命周期以及背后的状态管理
  • CPM:CMake 包管理详细介绍
  • D3.js + SVG:数据可视化领域的黄金搭档,绘制动态交互图表。