客户端占用内存过高怎么办

代理类客户端内存占用通常在 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,客户端把日志读进内存做展示,内存跟着涨。

处理顺序

  1. 日志级别调回 info/warning,清空旧日志
  2. 规则集精简:只留常用域名,其余交给规则集自动更新
  3. 订阅数量减少:每多一个订阅就多一份节点和规则
  4. 重启客户端,观察是否还涨

什么时候该换客户端

如果重启后内存从 80MB 起步,两小时内涨到 800MB,且连接数正常、日志也不大,那就是程序本身的内存泄漏,换版本或者换工具。

判断标准:同样的用法,别的客户端不涨、它涨。

💡 一个误区:任务管理器显示的内存包含缓存,看"内存"列不如看"工作集"。数字大不一定是故障,持续增长不回落才是。

延伸阅读:端口被占用怎么排查、开机自启失效、连接日志怎么看。