先运行code --status定位高占用子进程(如Extension Host、tsserver、pyright、rg等),再配置files.watcherExclude排除node_modules等目录、降级语言服务器、禁用异常插件并彻底重启窗口。

VSCode 长时间高 CPU 占用,90% 以上不是编辑器本身的问题,而是某个后台子进程在持续满载——code --status 一眼就能定位真凶,不用猜、不盲禁、不重装。
怎么看哪个子进程在疯跑
别盯着任务管理器里那个“Code Helper (Renderer)”进程——它只是壳。真正干活的是 Extension Host、tsserver、pyright、cpptools-srv 或 rg 这类子进程。
- 终端运行
code --status,立刻列出所有子进程的 PID、实时 CPU% 和内存占用 - 重点关注
Extension Host:CPU% 长期 >60%,说明某个扩展(如esbenp.prettier-vscode、gitlens.gitlens、ms-python.python)在反复解析或监听失败后卡死 - 看到
tsserver或pyright占高?不是语言本身慢,是它正在全量加载node_modules/@types或整个依赖树做类型推导 -
rg进程内存 >300MB 或 CPU 持续拉满?八成是在扫node_modules、符号链接目录,或你打开了整个/Users/xxx这种超大文件夹 - 记下高占用进程的 PID,再用
ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页右键 → “打开文件位置”,确认命令行里是不是含pylance、gitlens、cpptools等关键词
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 扩展不是“慢”,是默认太贪——试图把整个依赖树加载进内存做语义分析。一个含 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% 内存
禁用扩展必须彻底重启窗口
点“Disable”只是阻止新加载,旧进程仍常驻内存。很多插件注册了 onStartupFinished 或 onLanguage:python,一旦激活就一直跑着。
- 先运行命令面板中的
Developer: Show Running Extensions,确认ms-python.python或esbenp.prettier-vscode确实在运行中 - 右键该插件 →
Disable (For All Folders)(注意不是仅当前工作区) - 必须完全关闭当前 VSCode 窗口(不是
Developer: Reload Window),再重新打开工作区 - 对 Python 项目,建议手动清理残留:
ps aux | grep -i "pyright\|python.*language",找到 PID 后kill -9 [PID]
最易被忽略的是:code --status 输出里的 Shared Process 占高,往往意味着遥测、同步或自动更新在后台轮询——这类问题不会出现在扩展列表里,也不会随禁用插件消失,得靠 "telemetry.telemetryLevel": "off" 或临时关掉 update.mode 来验证。


















