code --status是vscode性能诊断第一入口,可立即定位extension host、tsserver、pyright、rg.exe等高cpu/内存子进程;重点关注cpu>60%的extension host及内存>300mb的search进程,并通过pid确认具体扩展,禁用后须彻底关闭窗口重启才生效。

用 code --status 立刻定位真凶进程
VSCode 卡顿或风扇狂转,90% 以上不是编辑器本身的问题,而是某个后台子进程在满载运行。别只看任务管理器里那个“Code Helper (Renderer)”——它只是壳,真正干活的是 Extension Host、tsserver、pyright、cpptools-srv 或 rg.exe 这类子进程。
打开终端,直接执行:
code --status
重点关注三列:
-
Extension Host行的 CPU% >60%?说明某个扩展(如esbenp.prettier-vscode、gitlens.gitlens)正在反复解析或监听失败后卡死 -
tsserver或pyright占高?不是语言本身慢,是它正全量加载node_modules/@types做类型推导 -
Search进程内存 >300MB?八成是rg.exe在扫node_modules或符号链接目录
记下高占用进程的 PID,再用 ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页按 PID 查命令行,就能确认是哪个扩展启动的。
禁用扩展必须彻底重启窗口,否则进程照跑
右键扩展 → Disable (Workspace) 或 Disable (Global) 后,旧进程不会自动退出。VSCode 的 onStartup 扩展(比如 ESLint、GitLens、Prettier)会在启动瞬间拉起独立 Node.js 子进程,建索引、监听文件、预热服务;禁用操作只是阻止下次加载。
必须做的是:
- 完全关闭当前 VSCode 窗口(包括菜单栏图标),不能只点
Developer: Reload Window - 重新打开项目工作区,才真正释放所有子进程
- 验证是否生效:终端执行
ps aux | grep -i "pyright\|tsserver\|eslint-server",若仍有残留,说明没重启干净
高频嫌疑对象:esbenp.prettier-vscode、gitlens.gitlens、dbaeumer.vscode-eslint、ms-python.python。特别是 ESLint + Prettier 同时启用时,保存即触发双重校验+格式化,CPU 直接拉满。
files.watcherExclude 配错等于没配
VSCode 默认用 chokidar 递归监听整个工作区。一旦项目含 node_modules(几万小文件)、.git、dist,内核级 inotify 事件就会爆炸式触发,Node.js 子进程持续 100% 跑——你什么都没干,CPU 就飙了。
必须在项目根目录的 .vscode/settings.json 中添加(不是用户级 settings.json):
"files.watcherExclude": {
"**/node_modules/**": true,
"**/.git/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/__pycache__/**": true,
"**/coverage/**": true
}
注意:
- 通配符必须是
**/xxx/**,写成node_modules、*/node_modules/*或/node_modules/全部无效 - 改完必须关闭并重新打开该工作区,仅保存配置不生效
- Linux 用户额外检查:
cat /proc/sys/fs/inotify/max_user_watches,若低于524288,需调高
语言服务降级比禁用扩展更稳
Python 和 TypeScript 的语言服务不是“卡”,是默认设计为深度语义分析。中大型项目下,Extension Host 内存轻松破 1.2GB,CPU 持续拉高是必然结果。
推荐降级策略(写入项目级 .vscode/settings.json):
- Python:把
python.languageServer从Pylance改为Jedi(Jedi 不加载全部依赖,只做基础补全) - TypeScript:设
typescript.preferences.includePackageJsonAutoImports为off,避免导入时反复解析node_modules/@types - ESLint:设
eslint.run为onSave,并精简eslint.probe的文件类型(比如去掉.json) - GitLens:关掉
gitlens.codeLens.enabled和gitlens.hovers.enabled,能降 30%–50% 内存
这些配置改完仍需重启窗口——语言服务进程不会热更新。最常被忽略的一点是:即使禁用了扩展,若 settings.json 里还留着 "eslint.enable": true 或 "prettier.requireConfig": false 这类开关,VSCode 仍会尝试加载对应服务。











