收起左侧

Arm版本通过VMWare Fusion在mac上频繁出现Docker 启动时整机硬死

1
回复
36
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

江湖小虾

环境

项目 版本 / 配置
宿主机 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 的摘录)。

日志收集方法

  1. VMware Fusion 给虚拟机加一个串口,输出重定向到宿主机文件。编辑 <VM>.vmwarevm/<VM>.vmx
    serial0.present = "TRUE"
    serial0.fileType = "file"
    serial0.fileName = "/.../serial-console.log"
    serial0.yieldOnMsrRead = "TRUE"
    
  2. 客户机内核 cmdline 增加 console=ttyS0,115200(与原有 console=tty0 console=ttyAMA0,115200 并存),使内核 printk 输出到该串口并落盘到宿主机文件——即使整机死锁也能抓到 printk

upload 附件:logs.zip

本报告的问题分析、日志采集与验证由 Claude Code 完成。

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

2

主题

10

回帖

0

牛值

🛩️ARM内测用户组

arm的飞牛,虽然docker功能用起来可以,但是不建议启用docker啊,因为只要你重启设备,他大概率撞**报的这个问题。

后面除非你永不重启。我就是在多次试验后没有找到解决方案,无奈多次重装。最后一次重装,自己确保docker从未被启用【或者说点开docker入口后,提示首次使用需设置路径,这一步不要设置,否则就意味着docker被启用了】

希望官方能修掉这个bug。我是树莓派4B。只要设置过docker路径,重启有80%概率复现。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则