📈 生产选型不能靠体感。在 Debian 12 旁路网关(Ryzen 7 / 32GB)上,用相同 12.4 万条规则集与 200 并发 HTTP CONNECT 对 mihomo 1.19.0、sing-box 1.12.0、Clash Premium 2023.08 做 10 分钟稳态压测。核心结论:mihomo 规则 P99 210µs(sing-box 268µs),稳态 RSS 186MB,为后续 GEOIP 调优 与 出站协议选型 建立量化基线。
测试床与环境变量
硬件:AMD Ryzen 7 5800X / 32GB DDR4 / Samsung 980 Pro NVMe。系统:Debian 12,内核 6.1,net.core.somaxconn=65535。规则集:Loyalsoldier 合并版,约 12.4 万 DOMAIN-SUFFIX + GEOSITE 大类。出站:本地 loopback mock,排除真实节点 RTT 干扰。
负载模型
- 冷启动:从 systemd 拉起至
/version返回 200 - 稳态:200 并发 HTTP CONNECT,持续 10 分钟
- 规则压力:每秒 500 次新域名首次匹配(缓存未命中)
核心数据表
| 指标 | mihomo 1.19 | sing-box 1.12 | Clash Premium |
|---|---|---|---|
| 冷启动 (s) | 4.2 | 3.1 | 5.8 |
| 稳态 RSS (MB) | 186 | 142 | 210 |
| 规则匹配 P50 (µs) | 38 | 49 | 52 |
| 规则匹配 P99 (µs) | 210 | 268 | 295 |
| 10min 后 goroutine | 1,204 | 890 | 1,580 |
mihomo 特有配置的影响
unified-delay
开启 unified-delay: true 后,延迟探测从 TCP 握手改为 HTTP 首包,探测耗时增加约 15%,但 url-test 组选出的节点在 Web 场景更贴近真实体验。生产环境建议开启。
find-process-mode: strict
在 Linux 上读取 /proc 匹配 PROCESS-NAME 规则,CPU 占用上升 0.3–0.6%。若规则集未使用进程规则,设为 off 可节省开销。详见 规则优先级文。
tcp-concurrent
对同一目标并发 IPv4/IPv6 拨号,在双栈网络下首包延迟降低 8%,但日志中会出现双倍连接尝试;排障时注意区分。
内存与 GC 行为
mihomo 在 geodata 加载阶段会出现单次 80MB+ 分配尖峰,来自 MMDB 解析;解析完成后回落至 180MB 左右。sing-box 使用相同 DAT 文件时峰值更低,因其 lazy-load 策略更激进。若部署在内存 <256MB 的路由器,建议:
- 裁剪规则集,移除未使用的 GEOSITE 类别
- 设置
GEODATA_MODE=memconservative(mihomo 环境变量) - 考虑 sing-box 或 clash-rs 评估
⚠️ Clash Premium 已停更,仅作遗留对照。新部署请使用 mihomo,客户端获取见 下载页。
复现命令
# 规则匹配微基准(需安装 hyperfine)
hyperfine --warmup 3 \
'curl -s -o /dev/null -x http://127.0.0.1:7890 https://unique-test-{1..100}.example.com'
# RSS 采样
ps -o rss= -p $(pgrep mihomo) | awk '{print $1/1024 " MB"}'
结论与下一步
✅ mihomo 在规则匹配延迟上仍领先,适合大规则集桌面与网关场景;sing-box 内存更省,适合嵌入式。Premium 不应出现在 2026 年的新架构中。
读完本文后建议继续:GEOIP 优先级陷阱 → Hysteria2 弱网取舍 → 9090 端口加固。