先用developer: open process explorer定位rss>750mb或startup time>150ms的扩展,禁用后必须完全关闭窗口再重启;再在项目.vscode/settings.json中正确配置files.watcherexclude排除node_modules等目录,路径须含"**/"且生效需重开工作区。

怎么快速定位吃内存的扩展
别靠感觉猜,VSCode 自带的 Developer: Open Process Explorer 就是真相来源。按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入并执行它,直接看到每个扩展进程的实时 RSS 内存占用和 CPU 波动。
重点关注 Extension Host 下面的子项:
- RSS > 750MB 且持续波动,基本就是卡顿元凶
- Startup Time > 150ms 的扩展,一开就抢主线程,比如某些 Copilot 衍生插件、GitLens 全量历史扫描器
- 状态是 Running 而不是 Activated,说明它真正在后台干活,不是光注册了个事件
- 禁用后必须完全关闭当前窗口再重启,否则旧进程残留,内存不释放
- 右键扩展名 → 选
Disable (Workspace)比全局禁用更安全,尤其对多项目用户 - 常见高耗扩展:GitLens(关掉
gitlens.codeLens.enabled可降 30%–50%)、ESLint(设"eslint.run": "onSave")、Python(改用轻量pylsp或关python.analysis.extraPaths)
为什么 files.watcherExclude 必须配,而且不能写错
files.watcherExclude 不是“锦上添花”,它是防止内存爬升的底线配置。VSCode 的 chokidar 监听器每注册一个路径,就占一个内核级 inotify 句柄 + JS 对象引用;node_modules 这种几万文件的目录,会瞬间打爆句柄池,I/O 飙高,保存、搜索、切换标签全卡住。
必须写进项目根目录的 .vscode/settings.json,不是用户设置界面(界面加引号会导致解析失败):
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/.git/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/__pycache__/**": true,
"**/venv/**": true,
"**/logs/**": true,
"**/*.log": true
}
}
-
**/是关键,单星号*/或漏掉末尾斜杠会失效,子目录照样扫 - 不要写
"**/packages/**"这类模糊路径——chokidar会深度遍历所有子目录;而"**/node_modules/**"是内建白名单,有底层短路逻辑 - Linux 用户额外检查:
cat /proc/sys/fs/inotify/max_user_watches,若低于524288,运行echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
--disable-gpu 启动到底该不该加
这不是一刀切的事。M 系列 Mac 或独显本上,--enable-gpu 能让滚动、缩放更顺;但某些 macOS 外接显示器组合、虚拟机、旧款 Intel 核显下,--enable-gpu 反而引发渲染线程阻塞和内存泄漏。
验证方法很直接:
- 完全退出 VSCode(包括菜单栏图标)
- 终端执行 code --disable-gpu 启动,观察启动速度和活动监视器里的内存峰值
- 若变快且稳定,把 "disable-hardware-acceleration": true 加进 ~/Library/Application Support/Code/User/settings.json(macOS)或对应路径
- 若更卡,试试 code --enable-gpu --enable-gpu-rasterization,并确认 "workbench.enableExperiments" 为 false
-
--disable-gpu对 Windows/Linux 集成显卡用户效果通常最显著 - 改完设置后必须重启整个窗口,只刷新没用
哪些设置能从启动源头压内存
这些配置不依赖扩展,生效快、影响直接,适合所有项目复用:
- 关自动更新:
"extensions.autoUpdate": false,手动更新更可控 - 关非必要语言服务:
"typescript.validate.enable": false、"javascript.validate.enable": false - 限制标签页数量:
"workbench.editor.limit.enabled": true、"workbench.editor.limit.perEditorGroup": 12,防 OOM - 大文件处理:
"files.maxMemoryForLargeFilesMB": 4096,避免打开日志时卡死 - 关冗余提示:
"editor.codeLens": false、"editor.quickSuggestions": {"other": false, "comments": false, "strings": false}
改完必须关闭并重新打开当前工作区,设置才真正加载;只刷新窗口不会重载监听器或语言服务进程。











