Ubuntu 服务器稳定性问题排查指南
服务器“稳定性问题”通常表现为以下几种现象(严重程度递增):
- 服务间歇性卡顿 / 响应延迟突然升高
- 进程 hang / zombie 进程积累
- 系统 load 异常高但 CPU/IO 未饱和
- 随机 freeze(键盘鼠标无响应,但部分网络仍通)
- 软重启(OOPS / BUG_ON)或硬 panic(kernel panic)
- 完全死机(需断电重启)
这些问题在 Ubuntu 24.04 LTS(内核 6.8 系列)及后续点版本中仍偶有报告,尤其在特定硬件(Realtek 网卡、某些 AMD/Intel GPU、NVMe 控制器)和高负载场景下。
1. 先明确问题类型(最关键一步)
| 表现形式 | 最可能根因类别 | 优先检查命令/日志 | 典型占比(经验值) |
|---|---|---|---|
| 服务响应变慢 / 间歇卡顿 | 资源竞争 / 内存压力 / IO 等待 | top/htop/btop、vmstat 1 5、iostat -x 1 5 | 45–55% |
| 系统完全 freeze(无响应) | 内核 bug / 驱动 deadlock / GPU hang / 硬件 | journalctl -b -1 -p err、dmesg | grep -iE “oops | bug |
| 随机 kernel panic / oops | 驱动冲突 / 内存错误 / 内核 bug | journalctl -k -b -1、/var/crash/、dmesg | 10–20% |
| 开机后一段时间崩溃 | 模块加载顺序 / initramfs 问题 / phased updates | systemd-analyze blame、journalctl -b 0 | 5–10% |
| 高负载后掉线 / 服务挂起 | 网络驱动 buffer 溢出 / conntrack 满 | dmesg | grep -i eth、ss -m、nstat -az | 5–15% |
2. 核心排查步骤(推荐顺序)
步骤 1:收集崩溃现场证据(最重要!)
在系统还能 SSH 进去时立即运行:
- journalctl -b -1 -p err -n 500(上一次启动的错误日志)
- dmesg | grep -iE “error|oops|bug|panic|hung|freeze|fault|segfault|killed|oom”
- journalctl -k(纯内核日志)
- last reboot 或 uptime(崩溃前运行时长)
- free -h && vmstat 1 5 && iostat -xmdz 1 5(资源快照)
- ls -l /var/crash/(是否有 kernel crash dump)
如果系统已死机,重启后第一时间看 -b -1(上一次启动)。
步骤 2:判断是否内核级崩溃
- 有 “Kernel oops” / “BUG: unable to handle kernel NULL pointer” / “general protection fault” → 驱动或内核 bug
- 有 “Out of memory: Killed process” → OOM killer 触发(内存耗尽)
- 有 “watchdog: BUG: soft lockup” → 内核死锁或 CPU 卡住
- 有 “split lock” 或 “#PF” → 特定 CPU 微码 / 内核配置问题
步骤 3:硬件 vs 软件快速区分
| 倾向硬件问题 | 倾向软件/配置问题 |
|---|---|
| 随机、无明显负载触发 | 只在特定服务/负载下出现 |
| 换内核(HWE / mainline)改善 | 换内核无变化或更差 |
| memtest86+ / stress-ng –cpu 报错 | memtest 通过 |
| 特定硬件型号反复出现(Realtek r8125、某些 NVMe) | 虚拟机/不同硬件也出现 |
步骤 4:常见高频根因与对应定位方式
- 内存耗尽 + OOM killer 表现:进程被随机杀(journal 有 “Out of memory: Killed process”) 检查:grep -i oom /var/log/syslog*、cat /proc/meminfo、free -h -w 常见场景:Docker 无限制容器、Java 应用未设 -Xmx、大型数据库缓冲
- Realtek 网卡驱动问题(r8125 / r8169) 表现:高流量后网卡 buffer 耗尽 → 系统 freeze / panic 检查:dmesg | grep -i r81、ethtool -S ethX(看 tx/rx errors) 解法:blacklist r8169 + 安装官方 r8125-dkms 或 HWE 内核
- GPU / Mesa / AMDGPU / i915 hang(常见于带独显服务器) 表现:图形操作或 GPU 负载后 freeze(即使是无头服务器) 检查:journalctl -b -1 | grep -iE “amdgpu|i915|drm|gpu” 常见:Mesa 版本与内核不匹配 → 尝试 linux-generic-hwe 或回滚 Mesa
- 文件系统错误导致只读模式 表现:突然所有写操作失败,dmesg 有 “remounted read-only” 检查:dmesg | grep -i “I/O error|read-only”、fsck 日志 解法:强制 fsck(救援模式)、检查 SMART(smartctl -a /dev/nvme0)
- phased updates / SRU 延迟关键修复 表现:升级后新问题出现,但 apt policy 显示有更高版本未装 检查:apt policy linux-image-$(uname -r)、apt list –upgradable 强制:apt -o APT::Get::Always-Include-Phased-Updates=true upgrade
- systemd-networkd-wait-online 超时(开机慢或启动 hang) 表现:开机卡 90–120s 在网络等待 检查:systemd-analyze blame | grep wait-online 临时解法:systemctl disable systemd-networkd-wait-online.service
3. 生产环境预防与长期稳定性建议
- 内核策略:优先使用 HWE 内核(linux-generic-hwe-24.04),bug 修复更快
- 监控先行:Netdata(实时 + 历史) + Prometheus Alertmanager(OOM、soft lockup、disk read-only 等告警)
- 自动重启策略:启用 kdump + kexec(panic 时自动捕获 vmcore)
- 定期压力测试:stress-ng –cpu 0 –io 4 –vm 2 –timeout 3600(模拟负载)
- 硬件诊断:memtest86+(内存)、smartctl -t long(磁盘)、prime95/mprime(CPU)
- 最小化变更:生产环境禁用 unattended-upgrades 的非 security 升级,或手动审核
稳定性问题 80% 以上都能通过 journalctl -b -1 + dmesg + 资源快照 在 10–30 分钟内定位初步方向。