禁用插件不能直接释放内存,必须彻底终止extension host进程;因禁用仅标记下次不加载,当前进程仍驻留泄漏对象,需禁用后完全退出vscode再重开,才能清空js堆与native内存。

禁用插件不能直接释放内存——必须彻底终止 extensionHost 进程,否则泄漏对象仍驻留堆中。
为什么禁用后内存不降、点击“运行”还是卡
VSCode 的“禁用”操作只是标记插件下次不加载,当前正在运行的 extensionHost 进程不会退出,所有已分配对象(包括闭包捕获的 this._cache、未清理的 webview.onDidReceiveMessage 监听器、残留的 WeakMap 条目)全部保留在内存里。你看到的高 RSS 值、点击“运行”延迟几秒,都是这个旧进程在持续占用资源。
常见错误现象:
- 禁用
esbenp.prettier-vscode后,Developer: Show Running Extensions里仍显示其内存占用为 420MB - 点击“运行”按钮时,CPU 在
extensionHost进程上持续 >30%,但插件列表里它已标为“已禁用” - 执行
Developer: Reload Window后内存几乎不变——这说明 reload 没杀掉原进程,只刷新了渲染层
正确禁用 + 彻底清理三步法
目标是让 extensionHost 进程完全重启,清空 JS 堆与 native 内存。以下步骤缺一不可:
- 在命令面板(
Ctrl+Shift+P或Cmd+Shift+P)中运行Developer: Show Running Extensions,确认目标插件(如ms-python.python)内存值 >120MB 且稳定不回落 - 右键该插件 → 选择
Disable (Workspace)或Disable (User),然后立即关闭当前 VSCode 窗口(macOS 需从菜单栏选“Quit Visual Studio Code”,不能只关窗口) - 重新打开项目文件夹——此时新启动的 extensionHost 进程将跳过被禁用插件,
Developer: Open Process Explorer中对应条目应消失,RSS 应回落至 80–120MB 区间
禁用前先验证是不是它:快速隔离法
不想逐个试?用空载状态快速比对:
- 关闭所有编辑器标签页 → 等待 2–3 分钟 → 打开
Developer: Open Process Explorer - 记下
extensionHost下各插件的Memory值,重点关注空闲时仍 >150MB 的(如GitLens、ms-toolsai.jupyter) - 对疑似插件执行禁用 + 完全退出 VSCode → 重开 → 再次空载等待 → 对比 Memory 是否显著下降(例如从 600MB → 110MB)
- 若下降明显,基本锁定;若变化微弱,说明泄漏可能来自多个插件叠加,或存在
files.watcherExclude配置失效导致系统级 inotify 耗尽
容易被忽略的关键点
真正难处理的从来不是单个插件,而是多个语言服务器(如 pyright、tsserver、rust-analyzer)共存时的内存叠加效应。它们各自看似正常(Developer: Show Running Extensions 显示 90MB),但加总后轻易突破 1.2GB,触发 V8 OOM 退出。这种情况下,禁用一个插件只能缓解,必须配合 "typescript.tsserver.maxMemory": 6144 类配置限流,或改用轻量替代方案(如关闭 python.defaultInterpreterPath 自动探测,手动指定解释器)。











