跳过正文

凌晨3点的GPU服务器:一次BMC故障排查全记录

·2513 字·6 分钟·
作者
闫工
十年运营商机房 IT 运维,CCIE。做数据中心网络架构、GPU 服务器与裸金属交付,顺手写点自研小工具。

📌 转载说明:本文首发于微信公众号《闫工的算力工具箱》 原文链接:https://mp.weixin.qq.com/s/5CVjC9R8qVRwQVAwphXzBA

我是闫工,数据中心搬砖的CCIE。

前两弹聊的都是工具(SN剪贴速记、硬盘擦除)。这弹换个口味——不卖工具,卖教训。

第一篇实战,讲个我印象最深的故障:凌晨3点,一台8卡GPU服务器,没了。

现场:它死透了,但没死绝
#

凌晨3点,手机震醒。

监控大屏上一片红:集群里一台8卡GPU节点失联,训练任务中断。SSH连不上,ping不通——硬掉线

那一瞬间脑子里闪过的念头很真实:炸了?这么贵的GPU设备,大半夜的……

但我没往机房跑。因为这台机器虽然"死"了,主板上还住着一个独立供电、独立网络的小东西——BMC。它还在线。

登录BMC网页,第一眼就翻它的系统事件日志(SEL,相当于服务器的"黑匣子")。里面反复出现这么几行:

SEL #123 | Power Unit | Power off/down | Asserted
SEL #124 | Power Unit | Power off/down | Deasserted
SEL #125 | Power Unit | Power off/down | Asserted
SEL #126 | Power Unit | Power off/down | Deasserted

Asserted = 掉电,Deasserted = 恢复。交替出现,反复横跳

翻译成人话:机器的供电在"抖"——掉一下、回来、再掉一下、又回来。不是软件崩了,是电没供稳,主机被物理拽停。

硬件监控面板 · 电源模块告警

图:电源页面拉出来一看——PSU3 紧急、PSU4 轻微,另外两块正常

OK,有方向了。接下来一步步查。

查证:一步步锁定真凶
#

第一步:确认是哪块电源模块出了问题

GPU服务器通常配4到6个电源模块(GPU功耗大,冗余必须拉满)。用 ipmitool 扫一遍PSU状态:

ipmitool -I lanplus -H 192.168.x.x -U admin -P '******' sdr list | grep -i psu

输出:

PSU1 Status | ok
PSU2 Status | ok
PSU3 Status | failure
PSU4 Status | ok

PSU3 状态是 failure,其他三块正常。这台机器是4电源冗余配置(N+N或N+1),坏一块按理说还能撑住。但SEL里显示的是反复掉电恢复,说明不止是"坏了一块"那么简单——剩下的PSU在负载波动时也扛不住了,或者坏的那块在反复尝试上线又失败,把整路电都拖得不稳。

第二步:排除软件层面

掉电第一反应是"是不是系统里有人触发了关机"?查操作系统日志:

journalctl --since "2:00:00" | grep -i "shutdown\|poweroff\|thermal"

干干净净,啥也没有。dmesg 里也没有温度过高的告警。说明关机不是操作系统主动触发的,是硬件层直接被拽断了。

第三步:排查机房供电环境

电源冗余的机器,如果PDU有一路在闪断,SEL里也会出现类似的"掉电/恢复"交替记录。让机房值班同事帮忙看了一眼那台机器所在的PDU端口指示灯——正常亮着,没有闪烁。电源线也重新插拔了一遍,确认没有虚接。

线索收束:PSU3硬件故障 + 负载波动时供电不稳 → 机器被反复拽停。

告警总览 · 电源+硬盘双红

图:BMC 告警面板拉满——PSU3 紧急(电源输入丢失)、HDD0 严重(驱动器故障),电源和存储同时报警

顺带挖出第二颗雷
#

那晚顺手打开了BMC的远程KVM(就是隔空看屏幕),想确认机器死的时候屏幕上有没有留下什么。

结果看到了一个 kernel panic 界面:

RIP: 0010:ceph_set_page_dirty+0x1ba/0x1c0 [ceph]
---[ end trace f6f982abafac13ee ]---
CR2: 0000000000000070

旁边 nvidia_uvmnvidia_drm 这些NVIDIA驱动模块还挂在 Tainted(内核污染)列表里。

意思很明确:这台机器除了电源隐患,还埋着另一颗雷——NVIDIA驱动和内核/Ceph存储I/O有兼容性问题。高负载下自旋锁死锁(日志里能看到 native_queued_spin_lock_slowpath),驱动崩了连带kernel一起panic。电源抖是"导火索",驱动不稳是"体质问题"。

真要长治久安,驱动版本和内核得对齐,Ceph客户端的I/O压力也得调。

真凶找到了,怎么救?
#

短期止血:

  1. 远程冷重启(Power Cycle)——先把业务拉起来,训练任务恢复
  2. 锁定PSU3,不让它再上线(有故障的电源模块反复尝试接入反而会拖累整路电)
  3. 排期更换掉PSU3硬件

修复后 · 四路电源全部正常

图:锁定 PSU3、更换掉之后——四路电源全部恢复正常,电压/功耗/温度/转速一目了然

长期根治:

  • GPU服务器电源冗余配置要留足余量,别让PSU额定功率贴着峰值功耗跑
  • PSU状态必须上监控告警,不能等关机了才翻SEL——坏一块就应该报警
  • 机房供电波动也要纳入告警范围(部分数据中心支持PDU级别的电压/电流监控)
  • 驱动版本和内核版本对齐NVIDIA官方兼容矩阵,别用"能跑就行"的版本凑合

那一晚踩的四个坑
#

坑一:操作系统日志干干净净,差点误判

系统日志里啥异常都没有——因为掉电是硬件层的事,OS层面的日志根本来不及写。真相只在BMC SEL里。

教训:服务器"无故关机",第一反应别查/var/log,先查带外。

坑二:以为SSH能看现场,结果机器硬掉线

人在被窝,唯一能戳到机器的就是BMC的KVM/SOL/远程Power Cycle。没配带外管理的机器,大半夜只能跑机房。

坑三:SOL连上黑屏啥也没有

SOL(Serial over LAN)能把服务器的串口重定向到你这端,BIOS、启动信息都能远程看。但连上黑屏,根因在被控端没配全:

  • 没开串口服务:sudo systemctl enable --now serial-getty@ttyS0.service(状态得是active (running)
  • GRUB没把启动输出导向ttyS0
  • 控制端命令少了-I lanplus——SOL必须走lanplus通道,用默认lan连上就是黑屏
  • 防火墙没放行UDP 623端口

四缺一就黑屏,查了一遍才发现是第三项。

坑四:电源"冗余"被当成免死金牌

一只PSU悄悄failure,系统靠其他几只硬撑,平时根本发现不了——直到负载一高剩下的也扛不住,才彻底宕机。

冗余保的是"不瞬间死",不保"你不用管"。PSU状态得上监控告警,别等关机了才翻SEL。

结尾
#

这台8卡GPU节点的那一夜,是我对"带外管理"最刻骨铭心的一课:主机会死,但BMC记下了它怎么死的。 半夜把你叫醒的从来不是机器,是没配好的监控。

下篇不聊故障了,换个话题——一台裸金属服务器,MAAS 死活不认 Rocky Linux。我不改 MAAS,从头 Packer 打包了一个镜像,硬塞进去。

关注我,下期见。