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

空闲时 CPU 持续飙高,基本不是 VSCode 主界面的问题,而是某个后台子进程在“静默疯跑”——code --status 一眼就能锁定真凶,不用猜、不重装、不盲目禁用扩展。
怎么看谁在吃 CPU:直接运行 code --status
别盯着任务管理器里那个泛泛的 “Code Helper” 进程。真正干活的是它下面的子进程:
-
Extension Host长期 >60%:大概率是某个扩展(比如esbenp.prettier-vscode、gitlens.gitlens或ms-python.python)监听失败后卡死,或在反复解析node_modules里的类型声明 -
tsserver/pyright/cpptools-srv占高:不是语言本身慢,是正在全量加载整个依赖树做语义分析——打开一个含 50+ 包的项目,内存驻留破 1.2GB 是常态 -
rg(ripgrep)进程 CPU >400%:说明 VSCode 正在扫整个工作区找文件,常见于打开了/Users/xxx这类超大目录,或search.followSymlinks开着且遇到符号链接环 -
Shared Process占高:八成是遥测、设置同步或自动更新在后台轮询;临时加"telemetry.telemetryLevel": "off"可快速验证
记下高占用进程的 PID,再用 ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页右键 → “打开文件位置”,确认命令行里是否含 pylance、cpptools、rg --files 等关键词。
为什么改了 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/"全无效 - 改完必须完全关闭当前 VSCode 窗口(不是重载窗口),再重新打开该工作区
- Linux 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于524288就要调高
语言服务降级比禁用扩展更稳
Python 和 TypeScript 扩展不是“卡”,是默认太贪:Pylance 会把整个 @types 目录加载进内存,TS 的 auto-import 会在每次 import 时重扫 node_modules。
- Python:把
python.languageServer从Pylance改为Jedi(Jedi 不做全量语义分析,只做基础补全) - TypeScript:设
typescript.preferences.includePackageJsonAutoImports为off,并关掉editor.quickSuggestions中的strings和comments - C/C++:在
.vscode/c_cpp_properties.json中严格限制browse.path,并开启"limitSymbolsToIncludedHeaders": true - ESLint:设
eslint.run为onType,并精简eslint.probe(比如去掉.json、.md)
容易被忽略的“静默开销”点
有些配置看似无关性能,实则在后台持续拉高 CPU:
- 打开的是整个用户主目录(如
/Users/xxx)而非具体项目:VSCode 会默默执行rg --files --hidden --follow扫数万文件,rg进程直接占满多核 -
search.followSymlinks为true且工作区含符号链接环:ripgrep 会无限递归,直到被系统 kill 或耗尽资源 - Remote-SSH / WSL 连接未断开但远端已失联:本地 VSCode 会不断重试同步元数据,表现为
Code Helper (Plugin)持续高负载 - GitLens 启用了
gitlens.hovers.enabled或gitlens.codeLens.enabled:即使没悬停,它也在后台预加载 Git blame 数据
这些点不会报错,也不影响编辑,但风扇一响你就知道——它们一直在动。











