ProbeDeck

参考

性能与占用

下面是实测数字,不是估算。测量方式:docker stats 拿 cgroup 计费口径,Node inspector 读 V8 内部状态。

面板内存

场景cgroup 计费V8 堆
8 台,无通知89 MB19.2 MB
16 台,通知开启87 MB17.2 MB

8 台和 16 台占用几乎一样。节点数不是主要变量。

稳态与峰值

数值
稳态约 87 MB
峰值(memory.peak)约 185 MB

峰值出现在周期任务跑完前的短时间内(每小时表轮换、每分钟离线检测)。这些是已释放但尚未还给 OS 的内存,会自己回落——同一进程不重启也能从 162 MB 回到 87 MB。

判断是不是泄漏

三个判据全过就是正常:

  • 不随时间单调上涨——连续 24 小时横盘
  • 堆远低于上限—— heapUsed 17.2 / 上限 288,只用了 6%
  • native_contexts = 1,detached = 0——没有 context 泄漏

数据库

指标数值
16 台,14 天保留约 115 MB
8 台,14 天保留约 32 MB

到达保留窗口后文件大小就稳定了,不会一直涨。每小时跑一次表轮换,-wal 稳态约 4 MB。见数据与备份。

探针

指标数值
常驻内存约 8 MB
CPU 均值< 0.1%

调优手段

手段收益风险
NODE_OPTIONS 调小0无用——堆没接近上限,V8 无空间可回收
降低上报间隔减少写库量也减少实时性
缩短保留天数减小数据库丢历史
MALLOC_ARENA_MAX=230–50 MB(可能)未验证,不确定

别为了省内存去调 V8 堆上限。实测堆只用 17–20 MB,上限 288 → 128 不会让 RSS 少一个字节。上限设成多少对实际占用没有影响,因为 V8 根本不会接近它。

自己测

# 每小时一行,攒 24 小时看曲线
while true; do
  printf '%s %s\n' "$(date -Is)" "$(docker stats probedeck --no-stream --format '{{.MemUsage}}')"
  sleep 3600
done | tee ~/probedeck-mem.log
bash

重点看均值与峰值的比例。峰谷比 2 倍左右对 Node 服务是正常的。

在 GitHub 上修改这一页最后更新 2026-09-25