在 Debian 上运行 Node.js 出现内存泄漏(Memory Leak),通常不是“Debian 本身”的问题,而是 Node.js 应用层或运行环境 导致的。下面从常见原因 → Debian 特有因素 → 排查方法系统说明。
global.cache = [];
setInterval(() => {
global.cache.push(new Array(1e6));
}, 1000);
✅ 解决:
global= null 释放引用setInterval(() => {}, 1000); // 永不清除
emitter.on('data', handler); // 未 removeListener
✅ 解决:
clearIntervalemitter.removeListenerdestroy()const map = new Map();
map.set(key, value); // 从不删除
✅ 解决:
lru-cacheDebian 常用 systemd 启动 Node:
[Service]
ExecStart=/usr/bin/node app.js
⚠️ 默认可能限制内存:
cat /proc/<pid>/limits
✅ 建议:
MemoryMax=1G
或明确放开限制
Debian 内存不足时:
查看:
dmesg | grep -i oom
journalctl -u your-service
Debian Stable 常带:
✅ 建议:
node -v
使用:
ps -o pid,rss,vsz,comm -p <pid>
或:
top -p <pid>
node --inspect app.js
使用 Chrome DevTools:
const { heapUsed } = process.memoryUsage();
console.log(heapUsed / 1024 / 1024);
clinic.jsheapdumppm2| 现象 | 原因 |
|---|---|
| 内存只增不减 | V8 不立即归还 OS |
| 重启后恢复 | 累积型泄漏 |
| OOM 被杀 | 系统内存不足 |
| Docker 中爆内存 | cgroup 限制 |
如果你愿意,可以告诉我:
我可以帮你精确定位是哪一类泄漏。