应运行code --status查看Extension Host实例的PID、RSS内存和CPU%,RSS>500MB或CPU%长期>40%即存在泄漏或死循环;禁用插件后须完全关闭窗口重开,否则旧进程不释放。

怎么看 Extension Host 进程到底在干啥
别只盯着任务管理器里一个“Code Helper”,它不反映真实负载。真正该查的是 Extension Host 子进程——它跑着所有扩展的 JS 逻辑和语言服务器。运行 code --status,直接看到每个 Extension Host 实例的 PID、内存(RSS)、CPU% 和加载的扩展列表。如果某实例 RSS > 500MB 或 CPU% 长期 > 40%,基本就是它在泄漏或死循环。
禁用扩展后内存还不降?你没真正杀掉进程
VSCode 的扩展一旦激活(比如监听了 onLanguage:python 或 onStartupFinished),就会常驻在 Extension Host 进程里。点“Disable”只是阻止下次加载,旧进程不会退出。
- 必须先执行命令面板中的
Developer: Show Running Extensions,确认目标扩展状态是 “Active” - 右键 →
Disable (For All Folders),不是只禁当前工作区 - 完全关闭当前 VSCode 窗口(macOS 要退出菜单栏图标),再重新打开——
Developer: Reload Window没用 - 验证是否生效:终端执行
ps aux | grep -i "tsserver\|pyright\|cpptools-srv",看对应 PID 是否消失
files.watcherExclude 写错等于白配
这个配置是防内存爬升的底线,不是锦上添花。VSCode 默认用 chokidar 监听整个工作区,遇到 node_modules 这种几万小文件的目录,内核级 inotify 句柄会暴涨且几乎不回收——这是系统级泄漏,跟插件无关。
- 路径必须写成
"**/node_modules/**": true,"node_modules"或"*/node_modules/*"都无效 - 必须写进项目根目录的
.vscode/settings.json,全局设置不生效 - 改完要关窗口重开,仅保存 JSON 不触发重载
- Linux/macOS 用户顺手检查:
cat /proc/sys/fs/inotify/max_user_watches,低于524288就得调高
哪些扩展最该优先处理
不用猜,直接看 Developer: Show Running Extensions 的 RSS 排序。超 300MB 的基本就是靶心:
-
gitlens.gitlens:关掉gitlens.codeLens.enabled和gitlens.hovers.enabled能降 30%–50% 内存 -
esbenp.prettier-vscode+dbaeumer.vscode-eslint同时启用时,保存即双重格式化+校验,CPU 直接拉满 -
ms-python.python(含 Pylance):类型推导会加载整个依赖树;可设python.analysis.extraPaths为空,或换pylsp - AI 类扩展(如
github.copilot):部分版本后台预加载模型,RSS > 600MB 就该检查是否启用了“仅聚焦时激活”
复杂点在于:很多问题不是单个扩展导致的,而是多个扩展注册了相同事件(比如都监听 onDidSaveTextDocument),叠加触发资源争抢。这时候光禁一个没用,得配合 Extensions: Bisect Extensions 二分排查。



















