Closed foobartech closed 1 year ago
按一个内存页 4 KB 大小来计算,120 MB 的 RSS 有些太大了。
从日志上看
[metrics - connections] ActiveOpens=2755 CurrEstablished=1078 MaxConn=1078 PassiveOpens=0
可能是网络连接泄露导致的。我会想办法用容器集成测试重现这个问题。
此外,客户端为了防止镜面反射攻击有一个重放缓存。极限情况下会存储 3.6M 个 int64。这个对 openwrt 的内存占用是不小的。考虑到我没有找到 GFW 有实施这种攻击的证据,或许默认去除客户端的重放缓存是个好主意。关于镜面反射攻击:https://github.com/shadowsocks/shadowsocks-org/issues/183
此外,客户端为了防止镜面反射攻击有一个重放缓存。极限情况下会存储 3.6M 个 int64。这个对 openwrt 的内存占用是不小的。考虑到我没有找到 GFW 有实施这种攻击的证据,或许默认去除客户端的重放缓存是个好主意。
或者默认保留缓存,给一个option,小内存使用场景的用户可以按需关闭,毕竟大部分用户应该是使用 SagerNet 客户端的,安卓手机内存不是问题。
@foobartech 我尝试修复了这个问题,在集成测试环境里,内存占用从 300 MB 下降到了 2 MB。
请用 https://github.com/enfein/mieru/actions/runs/3709833071 里面的安装包验证一下。如果没有问题,会推出下个版本。
测试了几小时,内存占用没有持续升高的现象,确认已经修复了,感谢!
在路由器 (Redmi Router AX6S 256M 内存 openwrt 系统) 上运行 mieru,一开始内存占用较低,随时间逐渐增加并最终导致 oom-kill,考虑是否存在内存泄漏问题。
系统日志:
mieru 运行日志 (DEBUG) : 20221214_0347_2473_脱敏.log