code --status是vscode性能诊断第一入口,可直接列出extension host、pyright、tsserver等子进程pid及实时cpu%,重点排查高占用进程、files.watcherexclude配置错误、语言服务器全量索引及远程场景下rg扫描家目录等问题。

直接看 code --status,80% 以上问题能立刻定位,不用重启、不靠猜、不卸插件。
怎么看哪个进程在疯跑
VSCode 界面卡不卡,和 CPU 高不高是两回事——主界面响应正常但风扇狂转,说明真凶藏在后台子进程里。打开终端执行:
code --status
它会立刻列出所有子进程的 PID、CPU%、内存占用。重点关注三类:
-
Extension Host:长期 >60%,基本锁定是某个插件(如ms-python.python、esbenp.prettier-vscode)在反复解析或监听失败后卡死 -
pyright/tsserver/cpptools-srv:不是语言本身慢,是正在全量索引node_modules/@types或整个依赖树 -
rg(RipGrep):命令行带--files --follow --hidden,八成是在扫node_modules或用户家目录(比如打开了/Users/xxx)
记下高占用进程的 PID,再用 ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页右键 → “打开文件位置”,确认实际启动的是哪个扩展或二进制。
为什么 files.watcherExclude 配了没用
VSCode 默认用 chokidar 递归监听整个工作区,遇到 node_modules(几万小文件)、.git、dist 就触发 inotify 事件风暴,Node.js 子进程直接满载——你什么都没干,CPU 就飙到 70%。
- 必须写在项目根目录的
.vscode/settings.json中,不是用户级配置 - 通配符必须是
"**/node_modules/**": true,写成*node_modules*、/node_modules/或node_modules全无效 - 改完必须完全关闭当前 VSCode 窗口(不是
Developer: Reload Window),再重新打开该工作区才生效 - Linux 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于524288就要调高
禁用 Python/TypeScript 插件后 CPU 还高?
点“Disable”只是阻止新加载,旧进程常驻内存。很多插件注册了 onStartupFinished 或 onLanguage:python,一旦激活就一直跑着。
- 先运行命令面板中的
Developer: Show Running Extensions,确认ms-python.python确实在运行中 - 右键该插件 →
Disable (For All Folders)(注意不是仅当前工作区) - 必须完全关闭当前 VSCode 窗口,再重新打开工作区
- 手动清理残留:执行
ps aux | grep -i "pyright\|python.*language",找到 PID 后kill -9 [PID] - 更稳妥的替代方案:把
python.languageServer从Pylance改为Jedi(不做全量语义分析),或关掉typescript.preferences.includePackageJsonAutoImports
Remote-SSH 或打开家目录后 CPU 爆表
这不是本地 VSCode 的问题。如果 code --status 显示 rg 在扫 --files --follow --hidden,且工作区路径是 /Users/xxx 或远程路径,说明 VSCode 正在递归枚举整个家目录或远程文件系统。
- 绝对不要把 VSCode 直接打开在用户根目录(如
code ~),哪怕只是临时查个文件 - Remote-SSH 场景下,检查是否启用了
remote.ssh.showLoginTerminal或remote.ssh.enableDynamicForwarding,这些会触发持续轮询 - 顺手加
"search.exclude": { "**/node_modules/**": true, "**/.git/**": true },虽不降 CPU,但能避免搜索时二次触发rg - GitLens 等插件在远程场景下极易因频繁读取 reflog 导致
Code Helper (Plugin)持续高占,可临时禁用验证
最常被忽略的一点:code --status 输出里的 Window 行明确写着路径,如果它显示的是一个超大目录(比如 20000+ 文件),那问题根源根本不在插件,而在你打开的方式本身。











