VSCode 高 CPU 占用90%以上源于后台进程而非编辑器本身;执行 code --status 可精准定位 Extension Host、tsserver、pyright 或 cpptools-srv 等真实高负载进程,再结合 PID 和命令行确认具体扩展或配置问题。

VSCode 高 CPU 占用,90% 以上不是编辑器本身的问题,而是 Extension Host、tsserver、pyright 或 cpptools-srv 这类后台进程在满载运行——直接执行 code --status 就能定位真凶,不用猜、不重装、不盲目禁用扩展。
怎么看哪个进程在吃 CPU
别只盯着任务管理器里那个 “Code Helper” 进程——它只是壳。真正干活的是子进程:
-
Extension HostCPU% 长期 >60%?说明某个扩展(比如esbenp.prettier-vscode或gitlens.gitlens)在反复解析或监听失败后卡死 - 看到
tsserver或pyright占高?不是 TypeScript/Python 本身慢,是它正在全量加载node_modules/@types或整个依赖树做类型推导 - 名字带
cpptools-srv的进程持续 >70%?IntelliSense 正在扫描非项目路径(比如误含node_modules或.git) -
Search进程内存 >300MB?八成是rg.exe在扫node_modules或符号链接目录
记下高占用进程的 PID,再用 ps -p [pid] -o args=(macOS/Linux)或任务管理器“详细信息”页确认命令行,就能直接看到是哪个扩展启动的。
为什么 files.watcherExclude 必须配对且重启才生效
VSCode 默认用 chokidar 递归监听整个工作区。遇到 node_modules(几万小文件)、dist、.git,内核级 inotify 事件会爆炸式触发,Node.js 子进程持续 100% 满载——你什么都没干,CPU 就飙了。
- 必须写在项目根目录的
.vscode/settings.json中(不是用户级settings.json) - 通配符只认
"**/node_modules/**": true——写成"node_modules/**"、"*/node_modules/*"或"node_modules"全无效 - 配置项要配齐:
"**/dist/**": true、"**/build/**": true、"**/.git/**": true、"**/__pycache__/**": true - 改完必须关闭并重新打开该工作区;
Developer: Reload Window不触发 watcher 重建 - Linux 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于524288就要调高
语言服务降级比禁用扩展更有效
Python 和 TypeScript 的语言服务不是“卡”,是默认设计为深度语义分析。中大型项目下,Extension Host 内存轻松破 1.2GB,CPU 持续拉高是必然结果。
- Python:把
python.languageServer从Pylance改为Jedi(Jedi 不加载全部依赖,只做基础补全) - TypeScript:设
typescript.preferences.includePackageJsonAutoImports为off,避免 npm 包导入时反复解析@types - C/C++:在
.vscode/c_cpp_properties.json中启用"limitSymbolsToIncludedHeaders": true,并把browse.path严格限定为源码目录(如"${workspaceFolder}/src") - ESLint:设
eslint.run为onSave,并精简eslint.probe的文件类型(比如去掉.json)
插件更新期间 CPU 疯涨怎么压
插件更新会触发语言服务器重载、文件监视器重建、索引全量刷新三重叠加——尤其当 files.watcherExclude 没配或配错时,node_modules 被扫描是 CPU 满载的直接原因。
- 更新弹窗刚出现,就立刻执行
code --status,重点关注Extension Host和单独的tsserver/pyright行 - 更新前手动降级语言服务:
Python: Restart Language Server前先切到Jedi;TS 项目加"typescript.preferences.includePackageJsonAutoImports": "auto" - GitLens 更新后常驻高内存,可临时关掉
gitlens.codeLens.enabled和gitlens.hovers.enabled - 更新完成后,必须彻底退出 VSCode(不是重载窗口),再重新打开工作区——否则旧 watcher 和语言服务进程不会释放
最易被忽略的一点:很多优化(比如 files.watcherExclude、语言服务器切换)都依赖「完整关闭并重开工作区」,仅保存设置或重载窗口根本不管用。



















