vscode内存持续上涨且关闭文件后不回落,基本是扩展泄漏;验证方法为清空标签页等待2–3分钟观察内存是否下降,再执行developer: reload window对比内存变化。

VSCode 内存持续上涨且关闭文件后不回落,基本就是扩展泄漏,不是“用久了就卡”的自然现象——它可定位、可隔离、可修复。
怎么看是不是真泄漏,而不是单纯高内存
别急着关插件。真正的泄漏有明确特征:清空所有标签页 → 等待 2–3 分钟 → 内存占用仍不下降,甚至缓慢爬升。而正常高内存(比如刚打开一个大项目)在关闭文件后会明显回落。
关键验证动作:Developer: Reload Window。如果内存立刻大幅下降,说明问题在当前会话上下文里,大概率是扩展未清理资源;如果 reload 后内存纹丝不动,就得往下查进程级问题。
用 Process Explorer 查 Extension Host 进程
这是最轻量但最关键的一步:它直接显示 Extension Host 进程的真实内存趋势,比系统任务管理器更准——排除了渲染进程、GPU 进程等干扰项。
- 重点关注
Memory列数值持续上涨、且空载时仍维持150MB+的扩展 - 若某扩展在关闭所有文件后内存卡在
600MB+不动,基本可判定其dispose()逻辑失效 - 同时看
CPU列是否伴随周期性尖峰,这常对应未节流的定时器或未取消的fetch轮询
抓 Heap Snapshot 对比 Detached DOM 和 Closure
VSCode 的 Webview 插件(如 vscode-drawio、GitLens、ms-toolsai.jupyter)泄漏对象,往往卡在“已从 DOM 移除但 JS 仍持有引用”的状态。
- 打开相关文件(如 3 个
.drawio),执行Developer: Open Webview Developer Tools→Memory→Take heap snapshot,存为snapshot-1.heapsnapshot - 关闭所有相关文件,等待
30 秒(给 GC 时间),再拍一次存为snapshot-2.heapsnapshot - 在
Comparison视图中筛选Detached DOM tree:若数量 > 0,且新增类型含HTMLDivElement或CanvasRenderingContext2D,说明 Webview 实例没销毁 - 检查
Closure类型下新增函数的Retained Size:若 >2MB且闭包内引用了this._cache、context等大对象,就是泄漏根因
禁用扩展后内存不降?你可能没真正重启进程
禁用扩展只是标记为“不加载”,旧 Extension Host 进程仍驻留并持有全部内存。必须彻底终止该进程才能验证效果。
禁用可疑扩展(如 GitLens、esbenp.prettier-vscode、ms-python.python)后,必须 关闭当前窗口再重新打开,不能只 reload 或仅禁用。
特别注意:某些泄漏发生在模块顶层或 activate() 阶段(比如未清理的 setInterval、缓存 Map 持有请求对象),这类泄漏不会因禁用扩展而自动释放——只有杀掉进程、重开窗口,才能让整个 JS 上下文重置。











