developer: open process explorer才是真实rss内存依据,需按memory排序查extensionhost子进程;files.watcherexclude必须写在项目.vscode/settings.json中且规则含“/”前缀和“/”后缀;禁用插件后须完全关闭vscode窗口再重开,否则残留进程持续占内存。

Developer: Show Running Extensions 看不准内存?用 Process Explorer 才算数
VSCode 插件调试时报内存溢出,第一反应别急着改代码或加 --max-old-space-size。90% 的情况是 extensionHost 进程本身被拖垮了,而 Developer: Show Running Extensions 显示的只是 V8 堆估算值,经常滞后甚至标成 N/A——它不反映真实物理内存(RSS)。
真正要盯的是:Developer: Open Process Explorer。按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入并运行这个命令,展开 extensionHost 节点,按 Memory 列从高到低排序。重点关注那些带具体项目路径(比如 /home/user/myproject)且 RSS 长期卡在 >300MB 的条目。
- 数值稳定在 500MB+ 不回落?基本可以判定是监听器没释放或缓存未清理
- 同一插件多个子进程并存?说明
deactivate()没触发或失败 - 看到
pyright、tsserver、prettier关键词?右键复制命令行,确认是不是它们在后台持续吃内存
files.watcherExclude 配了但没用?检查三处硬性规则
files.watcherExclude 是防止 extensionHost 内存线性增长的底线配置,配错等于白配。它不是“建议项”,而是针对 Linux/macOS inotify 句柄耗尽的系统级补救。
必须同时满足以下三点:
- 写在项目根目录的
.vscode/settings.json里——用户级或全局设置在多工作区下 100% 失效 - 每条规则必须带双星号和尾部斜杠:
"**/node_modules/**": true✅,"**/node_modules"❌,"node_modules/**"❌ - 至少覆盖这四类:
"**/node_modules/**"、"**/.venv/**"、"**/.git/**"、"**/dist/**";用pnpm就补"**/node_modules/.pnpm/**": true,用turborepo就加"**/.turbo/**": true
search.exclude 完全不影响监听器创建,别混用。
禁用插件后内存不降?旧 extensionHost 进程根本没退
点 “Disable” 只是阻止下次加载,正在跑的 extensionHost 子进程照常驻留——这是最常被忽略的操作盲区。
禁用目标插件(如 GitLens、esbenp.prettier-vscode、ms-python.python)后,必须:
- 完全关闭当前 VSCode 窗口(
Developer: Reload Window不行) - macOS 用户注意:要从菜单栏退出 VSCode,不只是关窗口
- 仍不稳?用
Developer: Open Process Explorer找出对应 PID,Linux/macOS 下执行kill -9 [PID]强杀;Windows 可用任务管理器定位 “Code Extension Host” 进程结束
不杀干净,所有配置和禁用操作都无效。
调试插件时 Node 子进程崩了?别给主进程加参数
如果你在调试插件源码(比如用 npm run debug 启动一个 vscode-extension-dev 实例),报 JavaScript heap out of memory,这不是 VSCode 主界面的问题,而是你启动的那个独立 Node 子进程堆超限。
解决方案只有一条路:给那个子进程加 --max-old-space-size。
- 改
package.json的 script 字段,例如:"debug": "node --max-old-space-size=4096 ./src/extension.js" - Windows 下必须用
cross-env:"debug": "cross-env NODE_OPTIONS=--max-old-space-size=4096 npm run launch" -
set NODE_OPTIONS=--max-old-space-size=4096或export NODE_OPTIONS是临时环境变量,只对当前终端生效,别设成全局
记住:--max-memory=4096 是给 Electron 主进程用的,对插件调试子进程完全无效;--max-old-space-size 对主进程也无效。参数和进程必须严格匹配。











