参考
性能与占用
下面是实测数字,不是估算。测量方式:docker stats 拿 cgroup 计费口径,Node inspector 读 V8 内部状态。
面板内存
| 场景 | cgroup 计费 | V8 堆 |
|---|---|---|
| 8 台,无通知 | 89 MB | 19.2 MB |
| 16 台,通知开启 | 87 MB | 17.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=2 | 30–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.logbash重点看均值与峰值的比例。峰谷比 2 倍左右对 Node 服务是正常的。
在 GitHub 上修改这一页最后更新 2026-09-25