code --status是vscode性能诊断唯一可靠起点,可精准列出extension host、tsserver、pyright等子进程的pid、cpu%和内存占用;需据此排查插件冲突、配置files.watcherexclude、降级语言服务并彻底重启窗口。

code --status 是唯一靠谱的起点
别看任务管理器里一堆 Code Helper,那只是壳。真正吃 CPU 的是子进程:Extension Host、tsserver、pyright、rg(RipGrep)或者 cpptools-srv。直接在终端运行 code --status,它会立刻列出每个子进程的 PID、实时 CPU% 和内存占用。重点关注:Extension Host 长期 >60%,说明某个扩展在反复解析或监听失败后卡死;rg 内存 >300MB,八成是在扫 node_modules 或符号链接目录;Shared Process 占高,大概率是遥测、同步或自动更新在轮询。
files.watcherExclude 配错等于没配
VSCode 默认用 chokidar 递归监听整个工作区。遇到 node_modules(几万小文件)、dist、.git,内核 inotify 事件就爆炸式触发,Node.js 子进程持续满载——你什么都没干,CPU 就稳在 70%+。
- 必须写在项目根目录的
.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 扩展不是“慢”,是默认设计为深度语义分析。中大型项目下,Extension Host 内存驻留轻松破 1.2GB,CPU 持续拉高是必然结果。
- 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% 内存
禁用扩展必须彻底重启窗口
点 “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 显示高占用进程后,不查它的命令行参数,就盲目禁用扩展——结果发现是 rg --files --hidden --follow 在扫整个 /Users/xxx 目录,跟插件根本无关。定位必须到具体命令,否则优化就是碰运气。











