直接用developer: open process explorer可精准查看各插件真实rss内存和cpu占用,展开extensionhost节点排序后能快速定位高内存插件(如gitlens占480mb、prettier占620mb),需区分瞬时峰值与空闲驻留,禁用后必须重启extension host才能释放内存,同时须配置files.watcherexclude防止inotify泄漏。

直接看每个插件占多少内存和 CPU,用 Developer: Open Process Explorer 就够了,不需要装任何插件,也不用查系统任务管理器——它显示的是真实进程级 RSS 内存,不是估算值。
用 Developer: Open Process Explorer 看实时内存占用
这个命令打开的是 VSCode 自己的进程树视图,比系统任务管理器准得多,因为 Extension Host 是多子进程结构,系统层面只看到“Code Helper”一个壳。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并运行Developer: Open Process Explorer - 展开
extensionHost节点,下面每一行就是一个已启用插件,旁边数字是当前 RSS 内存(MB) - 点击
Memory列标题可降序排列,前 3 名基本就是嫌疑对象;比如eamodio.gitlens占 480MB、esbenp.prettier-vscode占 620MB - 注意区分“瞬时峰值”和“空闲驻留”:格式化大文件时内存飙升属正常;但你关掉所有编辑器标签后它还稳在 350MB,大概率是监听器没
dispose()或缓存没clear()
为什么 Developer: Show Running Extensions 显示的内存不准
这个面板只提供估算值,且不反映进程实际 RSS,容易漏掉真正吃内存的插件。它更适合看激活耗时(Activation Time),而不是内存泄漏。
-
Activation Time > 500ms的插件会拖慢启动,但不一定吃内存;比如ms-python.python初始化语言服务器可能耗时久,但运行中内存稳定 - 它对 GitLens、Prettier 这类常驻服务型插件的内存估算常偏低,因为它们把大量对象挂在全局
Map或闭包里,Show Running Extensions没法扫描到 - 若某插件显示
N/A或数值异常低(如),反而要警惕——可能是它触发了 Electron 的 SharedWorker 或 Webview 子进程,内存记在别的节点下
禁用插件后内存不降?关键在重启方式
右键禁用只是标记状态,旧 Extension Host 进程仍驻留内存,必须强制刷新进程空间。
- 禁用插件后,**必须执行
Developer: Restart Extension Host**(命令面板搜),否则内存 RSS 不变 - 更彻底的做法:关闭当前窗口 → 终端执行
code --disable-extensions /path/to/project重新打开,确认是否真由插件引起 - 某些插件(如
GitHub.copilot、ms-vscode-remote.remote-ssh)注册了全局监听器,即使禁用也可能残留子进程,需手动ps aux | grep -i copilot+kill -9 [PID] - 别信“重载窗口”(
Developer: Reload Window),它不释放 Extension Host 进程,只是刷新 Renderer
files.watcherExclude 是防止内存爬升的底线配置
VSCode 默认用 chokidar 监听整个工作区,node_modules 有几万小文件时,每个都会分配 inotify 句柄,内存随项目规模线性增长——这不是插件问题,但会让所有插件一起陪跑。
- 必须在项目根目录的
.vscode/settings.json中写死排除规则,不能依赖用户级设置 - 基础配置至少包含:
"**/node_modules/**"、"**/dist/**"、"**/build/**"、"**/.git/**" -
search.exclude只影响搜索结果,**不阻止监听器创建**;真正治本的是files.watcherExclude - 用 pnpm 的项目,额外加
"**/node_modules/.pnpm/**": true;用 turborepo 的加"**/.turbo/**": true
最常被忽略的一点:多个插件共存时的隐式叠加效应。比如 Prettier + ESLint + Auto Rename Tag 同时监听 onDidChangeTextDocument,单个都合规,合起来就每打一个字触发三次 AST 解析——这时候看单个插件内存没异常,但 extensionHost 整体 RSS 持续 >800MB,得靠分组禁用+进程树观察才能揪出来。











