搜索 K
Appearance
本文是 AirPick 客户端工程系列的 sing-box 专项排障篇。配套阅读:sing-box 安装与配置入门、TUN 模式原理与实战。
三条铁律:
sing-box check -c config.json,再谈其他。 sing-box 是强 schema 校验的内核,配置层的问题占真实故障的六成以上,而 check 会在启动前就把它毙掉。debug 为止,trace 只在定位 DNS 与嗅探问题时短时启用。 trace 级别的磁盘写入和 CPU 抖动会反过来干扰你判断链路质量。mtr + tcping 证明链路通不通,再怀疑内核。 大量「sing-box 有问题」的工单,最后落在上游节点被 QoS 限速或 TCP 建连被 RST。30 秒定位树:
FATAL → JSON 语法 / schema 层context deadline exceeded → 上游 DNS 不可达或存在解析死循环把上面这棵树背下来,你已经能砍掉八成无效排查。
理解故障,先理解 sing-box 是怎么「活过来」的。
启动时序(简化):
-c 指定单文件,-D 指定目录并合并其中的 *.jsonoption 结构体 → service 中间表示(这一步做 schema 校验)Start():log 先起,DNS 次之,inbound 最后;任何一环失败都会触发 FATAL 并退出四层故障面:
decode configbind: 或 operation not permittedexchange failed 或 rule-seti/o timeout、EOF、connection reset一个必须知道的细节:TUN stack 的选择会影响你的排障结论。
"stack": "gvisor" 兼容性好但吞吐低、CPU 高;"stack": "system" 吞吐接近内核转发,但在部分老版本应用上会出现连接卡死。很多「换了 stack 就好了」的玄学问题,本质是 gVisor 用户态网络栈对某些 TCP 选项的处理与对端不兼容,而 system 栈走了内核路径。
同一份 sing-box,部署形态不同,排障难度和性能开销差异巨大。下表数据基于 x86 小主机与 M 系列 Mac 的实测区间,用于建立量级直觉。
| 量化指标 | TUN 模式 | 系统代理(mixed 入站) | 纯 SOCKS5 入站 | 透明代理(TPROXY/redirect) |
|---|---|---|---|---|
| 额外往返延迟 | +0.3~0.8 ms | +0.8~2 ms | +0.8~2 ms | +0.4 |