应直接运行code --status精准定位高负载语言服务进程(如tsserver、pyright、cpptools-srv),再通过ps或任务管理器确认命令行;须正确配置files.watcherExclude为"/node_modules/":true、降级语言服务器并彻底关闭窗口清理残留进程。

直接看 code --status,别猜进程、别重装、别关插件就重启——它会立刻告诉你哪个语言服务(tsserver、pyright、cpptools-srv)正在满载运行。
用 code --status 精准定位语言服务进程
VSCode 主界面不卡但风扇狂转,说明问题在后台语言服务,不是 UI 线程。终端执行 code --status 后,重点关注三类进程:
-
Extension HostCPU > 60%:大概率是ms-python.python或esbenp.prettier-vscode在反复解析或监听失败后卡死 - 命令行含
tsserver、pyright、cpptools-srv的进程:不是“语言本身慢”,是它正在全量加载node_modules/@types或整个依赖树做类型推导 - 进程内存 > 300MB 且持续增长:说明符号索引没收敛,比如 C++ 扩展在扫
boost/asio.hpp这类大头文件
记下高占用进程的 PID,再用 ps -p [PID] -o args=(macOS/Linux)或任务管理器“详细信息”页右键 → “打开文件位置”,确认实际启动的是哪个服务二进制。
files.watcherExclude 配错等于白忙活
语言服务高 CPU 很多时候是被文件监听拖垮的——chokidar 默认递归监听整个工作区,遇到 node_modules(几万小文件)、.git/objects 就触发 inotify 事件风暴,语言服务被迫反复重解析。
- 必须写在项目根目录的
.vscode/settings.json中,用户级设置无效 - 通配符必须是
"**/node_modules/**": true,写成*/node_modules/*、/node_modules/或node_modules全部不生效 - 改完必须完全关闭当前 VSCode 窗口(不是重载),再重新打开工作区才触发更新
- Linux/macOS 用户若仍卡顿,检查
cat /proc/sys/fs/inotify/max_user_watches,低于524288就要调高
降级语言服务比禁用插件更有效
禁用 ms-python.python 会丢掉补全和跳转;但把语言服务器从 Pylance 切到 Jedi,既能保基础功能,又避免全量语义分析吃光内存。
- Python:设
python.languageServer为Jedi(Jedi不加载全部依赖,只做基础补全) - TypeScript:关掉
typescript.preferences.includePackageJsonAutoImports,防止导入时反复解析node_modules/@types - C/C++:在
c_cpp_properties.json中精简includePath,排除非项目路径;启用"C_Cpp.intelliSenseCacheSize": 1024控制缓存上限 - Java:设
java.trace.server为off,关掉语言服务器追踪日志
容易被忽略的残留与轮询行为
点“Disable”插件只是阻止新加载,旧语言服务进程仍在后台跑着——这是最常被漏掉的一环。
- 先运行命令面板中的
Developer: Show Running Extensions,按 CPU% 排序,确认ms-python.python或ms-vscode.vscode-typescript-next是否还在运行 - 右键目标插件 →
Disable (For All Folders)(注意不是仅当前工作区) - 必须彻底关闭窗口,再重开;否则
pyright或tsserver进程不会退出 - 顺手清理残留:
ps aux | grep -i "pyright\|tsserver\|cpptools",找到 PID 后kill -9 [PID] - Shared Process 占高?临时加
"telemetry.telemetryLevel": "off"验证是否遥测或同步在轮询
真正卡住的往往不是某一行配置,而是多个环节叠加:监听范围没 exclude、语言服务器还在全量索引、旧进程又没 kill 干净——三者缺一,CPU 就很难真正降下来。


















