Ubuntu Node.js 日志中的内存泄漏检测
一 建立可观测的内存基线
const fs = require('fs');
setInterval(() => {
const m = process.memoryUsage();
const msg = `${new Date().toISOString()} RSS:${m.rss/1024/1024}MB HeapTotal:${m.heapTotal/1024/1024}MB HeapUsed:${m.heapUsed/1024/1024}MB External:${m.external/1024/1024}MB\n`;
fs.appendFileSync('memory.log', msg);
}, 1000);
关注:RSS(常驻集大小)持续上升、HeapUsed长期不回落。必要时用top/htop观察进程常驻内存是否单调增长。二 快速判定是否存在泄漏
三 抓取并分析堆快照定位泄漏点
const heapdump = require('heapdump');
heapdump.writeSnapshot('/tmp/heap-' + Date.now() + '.heapsnapshot');
const memwatch = require('memwatch-next');
memwatch.on('leak', (info) => {
console.error('Memory leak detected:', info);
heapdump.writeSnapshot('/tmp/leak-' + Date.now() + '.heapsnapshot');
});
四 运行时监控与自动化
五 常见泄漏模式与修复要点