Surge iOS 使用了系统的 Network Extension 机制实现其功能,但是由于 Apple 对 NE 插件的内存使用进行了非常严格的限制(不可超过 15 MB),Surge iOS 可能由于突发内存使用超限被系统强行终止。
如果在使用过程中遇到了 Surge 突然终止,且日志中最后包含 “Received memory warning” 字样,那么你可能遇到了该问题,该问题产生原因很复杂,以下给出一些可能的原因:
- 减少规则数量
规则数量过多可能导致该问题,一般来说不建议超过 500 条规则。规则集中的规则数量也计算在内。
- 关闭脚本功能
目前 Surge 对脚本使用的内存并无限制,部分脚本可能使用了过多的内存,同时使用了过多的脚本也会引起问题。
- 关闭 Network Framework 功能
启用该功能后由于 TCP stack 的内存占用将从内核转移到应用自身,且 NF 框架设计时并未考虑内存占用问题,将大幅提高内存占用,如果没有需要请勿开启该选项。
- 开启 Always On(始终开启)
如果该问题只在偶然情况下发生,可以考虑开启 Always On(始终开启)选项,让 Surge 被终止后能够自动重启。
注:在 Surge iOS 4.4.3 更新后,由于调整了一些初始化的逻辑,如果配置文件非常巨大可能导致 Surge iOS 直接无法正常开启,请精简配置规则至 500 条以内。特别是对于大量的广告屏蔽类规则,应该使用 DOMAIN-SET 实现。