应重点关注 developer: open process explorer 中 extensionhost 下各插件的 memory(驻留内存是否持续 >300mb)、cpu(连续10秒是否稳定 >25%)及子项名称,禁用后须执行 developer: restart extension host 才能释放内存。

Developer: Open Process Explorer 看什么
VSCode 内置的 Developer: Open Process Explorer 是唯一能直接告诉你“哪个插件在吃内存”的原生命令。它不依赖任务管理器里模糊的 Code Helper 进程,而是精确到每个扩展的实时 RSS 内存和 CPU 占用。
执行后重点关注三列:
-
Memory:单位 MB,看驻留内存是否持续不降(比如关掉所有文件后还 >300MB) -
CPU:不是峰值,是连续 10 秒内是否稳定 >25% —— 某些插件只在保存时爆发,静态值会漏判 -
extensionHost下子项:每个条目对应一个已启用扩展,名称格式如esbenp.prettier-vscode或ms-python.python
右键可直接禁用,但注意:禁用 ≠ 释放内存,旧进程还在跑,必须执行 Developer: Restart Extension Host 才生效。
为什么禁用插件后内存不降
VSCode 的禁用操作只是标记状态,不会终止正在运行的 extension host 子进程。你看到的内存数值纹丝不动,是因为插件代码仍在后台驻留。
必须做以下任一操作才能真正释放资源:
- 执行
Developer: Restart Extension Host(命令面板中搜) - 关闭当前窗口,再用
code --disable-extensions重新打开同一项目 - 某些插件(如
GitHub.copilot、ms-vscode-remote.remote-ssh)会注册全局监听器,即使禁用也可能残留子进程,此时需手动查ps aux | grep -i "copilot\|remote"并kill -9 [PID]
Extension Host Profile 火焰图怎么看
当你锁定某个高内存插件,想确认是哪段代码拖慢时,Developer: Start Extension Host Profile 是关键步骤。
操作流程很明确:
- 先启动采样:
Developer: Start Extension Host Profile - 复现卡顿场景(比如保存大文件、输入触发补全)
- 立即停止:
Developer: Stop Extension Host Profile,导出.cpuprofile文件 - 这个文件不能在 VSCode 里打开,必须用 Chrome DevTools:打开
chrome://devtools→ Performance 标签页 → 右上角 ⋯ →Load profile
火焰图里横向是时间,纵向是调用栈,宽且深的区块就是耗时主因——常见是同步正则匹配、未 await 的文件读取、或重复初始化大型对象。
对比堆快照识别内存泄漏
如果插件内存持续上涨且不回落,光看 RSS 不够,得进开发者工具抓堆快照。
打开 Developer: Toggle Developer Tools → 切到 Memory 标签 → 点 Take heap snapshot,按如下节奏操作:
- 第一次快照:空闲状态(无文件打开、无编辑)
- 第二次快照:打开一个大项目,等 30 秒
- 第三次快照:关闭所有文件,再等 30 秒
切换到 “Comparison” 视图,筛选 Detached DOM tree、Closure 或新增大量 Array/Object 实例的构造函数。这些往往指向事件监听器未移除、缓存未清理、或全局变量意外保留引用。
这类泄漏不会立刻崩溃,但几小时后你会发现 extensionHost RSS 稳定在 800MB+,且重启窗口后又从 200MB 开始缓慢爬升——这才是真问题。











