code --status 是唯一可信的起点,可按cpu%排序识别tsserver、pyright等高占用子进程;files.watcherexclude需用/xxx/语法并重启vscode;降级语言服务器(如python切jedi)比禁用插件更稳;linux用户还需调高inotify.max_user_watches。

code --status 是唯一可信的起点
别看任务管理器里一堆“Code Helper”,那只是壳。真正吃 CPU 的是 tsserver、pyright、cpptools-srv 这类子进程,它们在后台全量加载依赖树、反复解析 node_modules/@types 或扫描巨量头文件。运行 code --status 后,立刻能按 CPU% 排序看到谁在疯跑。记下高占用进程的 PID,再用 ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页右键 → “打开文件位置”,就能确认是不是 ms-python.python 启动的 pyright,或是 vscode-cpptools 拉起的 cpptools-srv。
files.watcherExclude 配错等于没配
VSCode 默认用 chokidar 递归监听整个工作区,遇到 node_modules(几万小文件)、.git/objects、dist 就触发 inotify 事件风暴,语言服务被迫反复重建索引。必须在项目根目录的 .vscode/settings.json 中写:
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/.git/**": true,
"**/build/**": true
}
}
注意:**/xxx/** 是硬性语法,写成 */node_modules/*、node_modules 或 /node_modules/ 全无效;改完必须完全关闭当前 VSCode 窗口(不是重载),再重新打开工作区才生效。
降级语言服务器比禁用插件更稳
禁用 ms-python.python 或 typescript-language-features 只是砍掉功能,而降级配置能让语言服务继续工作但不拖垮机器:
- Python:把
python.languageServer从Pylance改为Jedi(Jedi不加载全部依赖,只做基础补全) - TypeScript:设
typescript.preferences.includePackageJsonAutoImports为off,避免导入时反复解析node_modules/@types - C/C++:在
.vscode/c_cpp_properties.json中启用"browse.limitSymbolsToIncludedHeaders": true,并严格限制"browse.path"只包含实际源码目录
Linux 用户容易漏掉的 inotify 限制
即使配了 files.watcherExclude,Linux 下仍可能卡顿——因为内核默认的 fs.inotify.max_user_watches 常低于 524288,导致 watcher 静默失败并不断重试。执行 cat /proc/sys/fs/inotify/max_user_watches 查当前值,若低于 524288,临时调高:sudo sysctl fs.inotify.max_user_watches=524288。这个限制不重启也生效,但要持久化需写入 /etc/sysctl.conf。











