必须用--inspect+Chrome DevTools抓真实堆快照,VSCode内置内存查看器无效;启动node --inspect=9229 app.js,Chrome访问chrome://inspect配置端口后捕获并对比快照,关注Retained Size和Detached对象。

Node.js进程内存监控必须绕过VSCode UI层
VSCode自身进程的内存占用(比如extensionHost)和你跑的node app.js完全无关——它不采集、不转发、也不显示你的Node子进程真实内存。想看process.memoryUsage()输出或堆快照,就得让Node自己说话,或者用系统级工具盯住它的PID。
用--inspect + Chrome DevTools抓真实堆快照
这是目前最准、最可控的方式,不是“在VSCode里点几下”,而是让Node暴露调试端口,再用Chrome的Memory面板操作:
- 终端手动启动:
node --inspect=9229 app.js(端口可换,但要记牢) - VSCode中配
launch.json为attach模式,port填一致值,address保持localhost - 浏览器打开
chrome://inspect→ Configure → 加localhost:9229→ 刷新后点inspect - 切到
Memory标签 → 点Capture heap snapshot,至少抓2次(比如请求前后)→ 右键对比快照
注意:Retained Size异常高、类型标为Detached的对象(如没释放的Buffer、被闭包捕获的EventEmitter)就是泄漏强信号;别信VSCode内置的“内存查看器”,它打不开.heapsnapshot文件。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
调试时内存虚高是设计使然,不是泄漏
断点暂停时V8强制保留所有变量引用链,GC被阻塞,heapdump体积暴增、UI卡死甚至报FATAL ERROR: Reached heap limit,这发生在VSCode主进程渲染线程,跟你代码无关:
- 断点前手动清空大对象:
bigData = null或delete globalThis.cache - 禁用自动展开:
"debug.inlineValues": false(写进settings.json) - 限制对象展开深度:
"debug.javascript.maxNodeModuleSize": 5000(单位KB) - 绝对不要右键
Copy Value含ArrayBuffer的对象——它会尝试base64编码,瞬间OOM
终端里用psutil或process.memoryUsage()做轻量轮询
如果不想开DevTools,又需要实时数字,直接在代码里埋点比外部top -p更稳:
- Node.js:在关键路径插入
console.log(process.memoryUsage()),关注heapUsed和heapTotal比值 - 加
--max-old-space-size=1024启动参数,让OOM提前暴露,避免漏掉缓慢泄漏 - Python项目同理,但要用
psutil.Process().memory_info()查宿主进程,process.memoryUsage()只对Node有效 - 别依赖
Resource Monitor插件——它查的是整个code进程组RSS,不是你的node子进程
真正难的不是“怎么看到内存数字”,而是区分哪些涨是正常缓存、哪些是闭包没断、哪些是require阶段就埋下的全局引用——这些只能靠多抓几次快照+人工比对Retained Size,没有一键按钮。

















