Mega RAID一致性检查后突发性能骤降排查求助
兄弟,我太懂这种服务器突然变慢但数据全正常的糟心感了!结合你给出的RAID配置信息,咱们一步步来揪出问题:
先排查缓存策略——这是RAID性能的核心!
你的默认缓存策略是WriteBack, ReadAhead, Direct,但一致性检查后控制器可能会自动切换缓存模式(比如怕掉电风险切到WriteThrough),这会直接把写入性能砍半都不止:
- 用命令查当前实际生效的缓存策略:
重点看megacli -LDInfo -L0 -a0Current Cache Policy这一行,如果显示的是WriteThrough,赶紧改回WriteBack:megacli -LDSetProp WB -L0 -a0 - 注意!改WriteBack前必须确认BBU(电池/电容缓存)状态正常,不然控制器会强制用WriteThrough:
输出里找megacli -AdpBbuCmd -a0BBU Status,必须是Good才能放心开WriteBack。
确认一致性检查真的彻底结束了
有时候iotop看不到进程,但RAID控制器后台可能还在做校验后的收尾或者隐性修复,这会占用大量IO带宽:
megacli -LDCC -ShowProg -L0 -a0
如果显示还有进度在跑,那性能慢就是正常的,等它跑完就好了——12盘RAID6的50多TB阵列,收尾可能要几个小时。
检查CacheCade缓存盘状态
你提到有1块cascache盘(应该是MegaRAID的CacheCade吧?),它是用来加速读写的,要是它失效或者降级,性能会直接打回原形:
megacli -CacheCadeInfo -a0
看输出里的状态是不是Optimal,再看看缓存命中率(Cache Hit Ratio),要是命中率突然暴跌,说明缓存盘出问题了,可能需要重新配置或者更换。
揪出可能拖后腿的单盘
虽然RAID状态显示Optimal,但某块盘的隐性故障(比如慢盘、少量坏道)会被控制器限流,拖垮整个阵列:
- 查每块盘的错误计数和状态:
重点看megacli -PDList -a0Media Error Count、Other Error Count、Predictive Failure Count,只要有非零值,哪怕RAID没降级,这块盘也可能是瓶颈。 - 用
iostat看实时磁盘IO延迟:
盯着每个磁盘的iostat -x 1await(平均IO等待时间),要是某块盘的await比其他盘高好几倍,那它就是罪魁祸首,赶紧标记更换。
系统层面的IO调度器优化
如果以上都没问题,看看系统的IO调度器是不是拖了后腿:
- 先看当前调度器(sdX是你的RAID虚拟盘设备名,比如sda):
cat /sys/block/sdX/queue/scheduler - 如果用的是
cfq,改成deadline或者noop(RAID阵列更适合这两个):
要是想永久生效,得在echo deadline > /sys/block/sdX/queue/scheduler/etc/default/grub里加参数然后更新grub。
最后一招:重启RAID控制器(谨慎操作!)
要是所有排查都没问题,可能是控制器的缓存逻辑紊乱了,重启一下能解决不少玄学问题:
megacli -AdpRestart -a0
⚠️ 注意:这个操作会让虚拟盘短暂离线,一定要在业务维护窗口做,确保能容忍短时间中断!
你的RAID配置信息:
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
Size : 54.575 TB
Sector Size : 512
Is VD emulated : Yes
Parity Size : 10.915 TB
State : Optimal
Strip Size : 256 KB
Number Of Drives : 12
Span Depth : 1
Default Cache Policy: WriteBack, ReadAhead, Direct,...
备注:内容来源于stack exchange,提问作者danone

