环境
| 项目 |
版本 / 配置 |
| 宿主机 |
Mac mini(Mac16,10),Apple M4,10 核(4 性能 + 6 能效) |
| 宿主系统 |
macOS 26.5.1(构建 25F80) |
| 虚拟化 |
VMware Fusion 26.0.0(build 25388279) |
| 虚拟机 |
8 vCPU,8 GB 内存 |
| 客户机 |
fnOS 1.1.3105(基于 Debian 12 bookworm) |
| 内核 |
6.18.18-trim #649 SMP aarch64(自定义内核) |
| Docker |
28.2.2,data-root 在虚拟 NVMe(/vol3),live-restore=true(默认) |
| 防火墙后端 |
nftables |
问题描述
虚拟机在 docker 启动阶段(开机自启动、或 docker build)偶发整机硬死锁:SSH 断开、控制台冻结、永不恢复,只能强制重启。表现为全部 CPU 内核态软死锁(soft lockup),rcu_sched 被饿死,卡住的任务为 dockerd / containerd / runc,连 systemd(PID 1)也被拖住。属于 CPU 在内核态自旋,非 I/O 等待。
可能的原因(推测)
docker 启动阶段会并发地为多个容器与自定义 bridge 网络编程 nftables(NAT/DNAT/masquerade)和 overlay。怀疑这种并发的 netfilter / overlay 编程在该自定义 ARM 内核上触发了内核态自旋 / 死锁,进而导致全 CPU soft lockup。
注:整机死锁时 printk 无法刷出完整调用栈,目前未能抓到精确的卡死内核函数。以上均为基于现象的推测,确切定位需配置 kdump 抓取 crash dump。
关键日志(串口控制台抓取,docker / containerd 启动后约 66s)
Starting containerd.service - containerd container runtime...
...
[ 66.499880] rcu: INFO: rcu_sched self-detected stall on CPU
[ 66.505772] rcu: rcu_sched kthread starved for 5247 jiffies! ... ->cpu=3
[ 66.508659] rcu: Unless rcu_sched kthread gets sufficient CPU time, OOM is now expected behavior.
[ 72.015830] watchdog: BUG: soft lockup - CPU#1 stuck for 27s! [trim_file_monit:1855]
[ 72.019824] watchdog: BUG: soft lockup - CPU#7 stuck for 27s! [systemd:1]
[ 72.019961] watchdog: BUG: soft lockup - CPU#6 stuck for 27s! [dockerd:3198]
[ 72.020224] watchdog: BUG: soft lockup - CPU#3 stuck for 27s! [dockerd:3187]
[ 72.020502] watchdog: BUG: soft lockup - CPU#5 stuck for 27s! [dockerd:2340]
...(全部 8 个 CPU 软死锁,持续到 296s 仍未恢复,最终被强制重启)
完整日志见附件 fnos-serial-console-full.log(原始)/ serial-softlockup-excerpt.log(去除 ANSI 的摘录)。
日志收集方法
- VMware Fusion 给虚拟机加一个串口,输出重定向到宿主机文件。编辑
<VM>.vmwarevm/<VM>.vmx:
serial0.present = "TRUE"
serial0.fileType = "file"
serial0.fileName = "/.../serial-console.log"
serial0.yieldOnMsrRead = "TRUE"
- 客户机内核 cmdline 增加
console=ttyS0,115200(与原有 console=tty0 console=ttyAMA0,115200 并存),使内核 printk 输出到该串口并落盘到宿主机文件——即使整机死锁也能抓到 printk。
附件:logs.zip
本报告的问题分析、日志采集与验证由 Claude Code 完成。