代理类客户端内存占用通常在 50–200MB。如果长期超过 500MB,或者用着用着一直往上涨、不回落,就属于异常了。
先分清三种情况
| 表现 | 原因 | 处理 |
|---|---|---|
| 启动就 500MB+ | 规则集太大 / 节点列表太多 | 精简规则、减少订阅 |
| 用几小时后涨上去 | 日志或连接记录堆积 | 关详细日志、重启 |
| 一直涨不回落 | 连接表泄漏 | 升级版本或换客户端 |
怎么定位
第一步:看进程内部谁占得多
# Windows
tasklist /fi "imagename eq 客户端.exe" /v
# macOS / Linux
ps aux | grep 客户端名 | awk '{print $6/1024" MB", $11}'
如果同一个程序有多个进程,看主进程那条。子进程占几十 MB 是正常的(渲染、网络模块)。
第二步:看连接数
# Windows
netstat -ano | findstr ESTABLISHED | findstr 客户端PID | find /c /v ""
# macOS / Linux
lsof -p PID | grep -c TCP
正常几十到几百。如果上千,说明连接没被及时关闭——要么是程序问题,要么是规则里 MATCH 之后还留着 keep-alive。
第三步:看日志文件大小
ls -lh 日志目录/
日志级别开到 debug 或 trace 时,文件可能几小时就涨到几百 MB,客户端把日志读进内存做展示,内存跟着涨。
处理顺序
- 日志级别调回 info/warning,清空旧日志
- 规则集精简:只留常用域名,其余交给规则集自动更新
- 订阅数量减少:每多一个订阅就多一份节点和规则
- 重启客户端,观察是否还涨
什么时候该换客户端
如果重启后内存从 80MB 起步,两小时内涨到 800MB,且连接数正常、日志也不大,那就是程序本身的内存泄漏,换版本或者换工具。
判断标准:同样的用法,别的客户端不涨、它涨。
💡 一个误区:任务管理器显示的内存包含缓存,看"内存"列不如看"工作集"。数字大不一定是故障,持续增长不回落才是。