VSCode卡顿八成是插件内存泄漏,用Developer: Open Process Explorer可精准定位高RSS插件;禁用后须重启Extension Host或用code --disable-extensions验证;关键需配置files.watcherExclude并调整GitLens/ESLint/Prettier等插件默认行为。

VSCode 内存占用高、卡顿,八成是某个插件在后台疯涨 RSS 内存,而不是编辑器本身有问题——直接用内置 Developer: Open Process Explorer 就能定位到具体是哪个插件占了 400MB+ 还不释放。
怎么看 Extension Host 进程的真实内存?
别信任务管理器里那个模糊的 “Code Helper” 数值,它混着渲染进程和共享进程,根本分不清谁在吃内存。VSCode 自己的进程管理器才反映真实情况:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并运行Developer: Open Process Explorer - 展开
extensionHost节点,下面每一行就是一个已启用插件,旁边数字是当前 RSS 内存(单位 MB) - 点击 “Memory” 列标题可排序,一眼揪出前 3 名:比如
esbenp.prettier-vscode占 620MB、eamodio.gitlens占 480MB,基本就是它们 - 注意区分“瞬时峰值”和“空闲驻留”:格式化大 JSON 时
prettier暂时飙到 500MB 属正常;但你关掉所有文件后它还稳在 350MB,大概率泄漏
禁用插件后内存不降?必须重启窗口
右键插件选 Disable (For All Folders) 只是标记禁用,旧的 extensionHost 进程还在跑,内存不会回收:
- 禁用后,必须执行
Developer: Restart Extension Host(命令面板里搜),否则 RSS 值纹丝不动 - 更彻底的做法是关闭当前窗口,再用
code --disable-extensions重新打开同一项目——如果卡顿消失,100% 是插件问题 - 某些插件(如 Copilot、Remote-SSH)会注册全局监听器,即使禁用也可能残留子进程,此时需手动查
ps aux | grep -i "copilot\|remote"并kill -9 [PID]
为什么 GitLens / ESLint / Prettier 容易爆内存?
这类插件不是代码写得差,而是默认行为太“勤快”,在你不注意时疯狂分配对象:
-
GitLens默认开启全仓库符号缓存,关掉gitlens.advanced.caching.enabled后内存常降 200–300MB -
ESLint默认eslint.run设为onType,每敲一个字符就触发一次完整 AST 解析;改成onSave立刻缓解 -
Prettier对超长行或嵌套 JSON 格式化时会构建巨大 AST,若配合editor.formatOnSave+ 大文件,极易触发 V8 堆溢出 - 所有这些设置都写在
.vscode/settings.json或用户settings.json里,改完必须重载窗口才生效
files.watcherExclude 不配,前面全白忙
就算你把所有插件调到最轻,只要没配 files.watcherExclude,VSCode 就会为 node_modules 里的几万个文件注册 inotify 监听器,持续吃内存且几乎不释放:
- 在
settings.json中加这段(必须是 workspace 级别才对项目生效):"files.watcherExclude": { "**/node_modules/**": true, "**/dist/**": true, "**/build/**": true } - Linux/macOS 用户注意:
inotify有上限,默认 8192,node_modules轻松突破;配完这个,Extension Host内存爬升速度会明显变慢 - 验证是否生效:打开
Developer: Open Process Explorer,观察Search进程内存是否从 >300MB 降到 Search 进程,90% 是rg.exe在扫不该扫的目录
真正难排查的从来不是“哪个插件占得多”,而是“为什么禁用了还占着”——往往卡在进程没重启、watcher 没排除、或者两个插件互相触发(比如 ESLint 格式化后触发 Prettier 再格式化)。盯住 extensionHost 的 RSS 数值变化,比看火焰图更快定位问题。


















