在使用 Surge 的增强模式或网关模式时,如果有客户端使用 P2P 技术巨量的建立连接(如 BT 下载),可能导致 Surge 出现异常。表现为 Surge 无响应、整个系统无网络、Dashboard 无法连接等等,而且该问题可能只能靠手动重启 Surge 恢复。
引发该问题的原因是 macOS 有固定尺寸的网络栈内存缓冲区(约 256MB),一旦网络栈内存耗尽,为保证系统不崩溃,便会关闭目前网络栈使用量最高的程序的所有 socket,导致 Surge 无法继续工作且无法恢复。
可以使用以下命令提高系统的网络栈内存缓冲区至 512MB,并开启服务器性能模式,当使用 Surge 作为网关时推荐开启:
sudo nvram boot-args="serverperfmode=1 ncl=262144"
注:对于 M1/M2 设备,需要进入恢复模式将安全级别调至中等,并关闭 SIP(csrutil disable),重启进入 macOS 后再执行上述命令。
另外,Surge Mac 5 新的高性能 VIF 会加剧该问题的出现概率,如果频繁遇到该问题,可考虑在高级设置中开启传统 VIF 选项。(传统 VIF 模式下,产生的大量网络栈内存占用由 Surge 进程负担,不占用内核网络栈缓冲区。)
UPDATE:
在最新的 Surge Mac 5.2.1 版本中,加入了对该问题的自动检测,当出现问题时将自动重启 Surge 并进入安全模式(即自动回退到传统 VIF 模式)。