code --status是唯一可信起点,可立即列出Extension Host、tsserver等子进程PID、CPU%和内存占用;需据此定位高占用进程,配置files.watcherExclude为"/node_modules/": true并彻底重启窗口。

code --status 是唯一可信的起点
别信任务管理器里那个“Code Helper”进程,它只是壳。真正吃 CPU 的是后台子进程,code --status 会直接列出所有子进程的 PID、实时 CPU% 和内存占用。重点关注 Extension Host(长期 >60% 就基本锁定问题)、tsserver、pyright、cpptools-srv 或名字带 rg.exe 的搜索进程。记下高占用进程的 PID,再用 ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页右键 → “打开文件位置”,确认实际跑的是哪个扩展——比如 node /path/to/pylance 就是 Pylance 在作祟,不是“Python 扩展”这个笼统概念。
禁用扩展必须关窗口,不是重载
点“Disable”只阻止新加载,旧进程仍常驻内存。很多语言类插件注册了 onStartupFinished 或 onLanguage:python,一旦激活就一直跑着。操作必须闭环:
- 先运行命令面板中的
Developer: Show Running Extensions,确认目标插件(如ms-python.python)确实在运行中 - 右键该插件 →
Disable (For All Folders)(注意不是仅当前工作区) - 必须完全关闭当前 VSCode 窗口(不是
Developer: Reload Window),再重新打开工作区 - 对 Python/TS 项目,建议手动清理残留:
ps aux | grep -i "pyright\|tsserver",找到 PID 后kill -9 [PID]
files.watcherExclude 配错等于没配
VSCode 默认用 chokidar 递归监听整个工作区,遇到 node_modules(几万小文件)、dist、.git 就触发 inotify 事件风暴,Node.js 子进程满载——你什么都没干,CPU 就飙到 100%。
- 必须写在项目根目录的
.vscode/settings.json中(不是用户级设置) - 通配符必须是
"**/node_modules/**": true,写成*node_modules*、/node_modules/或node_modules全无效 - 配置后必须完全关闭并重开工作区,仅保存文件不生效
- Linux 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于524288就要调高
降级语言服务比禁用更实用
Python 和 TypeScript 扩展不是“慢”,是默认太贪:试图把整个依赖树加载进内存做类型推导。一个含 50+ 包的项目,Extension Host 内存轻松破 1.2GB,CPU 持续拉高是必然结果。
- Python:把
python.languageServer从Pylance改为Jedi(Jedi 不加载全部依赖,只做基础补全) - TypeScript:设
typescript.preferences.includePackageJsonAutoImports为off,避免导入时反复解析node_modules/@types - ESLint:设
eslint.run为onType,并精简eslint.probe的文件类型(比如去掉.json) - GitLens:关掉
gitlens.codeLens.enabled和gitlens.hovers.enabled,能降 30%–50% 内存
最常被忽略的一点:插件禁用后,settings.json 里残留的配置(比如 "prettier.requireConfig" 或 "eslint.enable")仍可能触发后台检查;.vscode/extensions.json 里的推荐项也会在打开工作区时自动拉起插件。不清理这些,等于白禁。


















