code --status 是唯一可信的起点,它直接列出所有真实进程的 pid、cpu% 和内存占用,重点关注 extension host、语言服务器(tsserver/pyright/cpptools-srv)和 search 进程,并通过 pid 定位具体插件或命令行关键词。

code --status 是唯一可信的起点
别信任务管理器里那个“Code Helper”进程——它只是壳。真正吃 CPU 的是后台子进程,code --status 会直接列出所有真实进程的 PID、实时 CPU% 和内存占用。重点关注三类:
-
Extension Host:CPU% 长期 >60%,说明某个插件(比如ms-python.python、esbenp.prettier-vscode)在 onSave 或监听失败后卡死 -
tsserver/pyright/cpptools-srv:不是语言本身慢,是正在全量加载node_modules/@types或整个依赖树做语义分析 -
Search进程内存 >300MB:八成是rg.exe在扫node_modules或符号链接目录
记下高占用进程的 PID,再用 ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页右键 → “打开文件位置”,确认命令行里是否含 pylance、tsserver、cpptools 等关键词。
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 扩展不是“慢”,是默认太贪:试图把整个依赖树加载进内存做类型推导。一个含 50+ 包的 Python 项目,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% 内存
远程开发时配置必须写在服务端
连 Remote-SSH 或 WSL 时,files.watcherExclude 写在本地 settings.json 完全无效。VSCode 远程开发走的是服务端配置。
- 必须修改远程路径:
~/.vscode-server/data/Machine/settings.json - 内容要完整:
"files.watcherExclude": { "**/node_modules/**": true, "**/dist/**": true, "**/.git/**": true } - 双星号
**是硬性要求,漏一个都白配 - 改完必须关闭并重新打开远程窗口(不是重载),且手动清理残留进程:
ps aux | grep -i "pyright\|tsserver\|cpptools"→kill -9 [PID]
最常被忽略的一点:很多插件注册了 onStartupFinished 或 onLanguage:python,一旦激活就常驻内存。点“Disable”只是阻止新加载,旧进程仍在跑——不关窗口、不清 PID,CPU 就永远降不下来。











