vscode 启动后 cpu 占用飙升的根源是全量文件监听与语言服务预热,尤其在含 node_modules 的项目中;应配置 files.watcherexclude、禁用自动类型导入、调整 eslint/prettier 触发时机,并卸载 gitlens 等高耗插件。

VSCode 启动后 CPU 占用飙升到 100%,Code Helper (Renderer) 进程吃满核心
这是 macOS 上最典型的症状:打开一个中等规模的项目(比如含 node_modules 的前端工程),几秒内风扇就转起来,Activity Monitor 里看到多个 Code Helper (Renderer) 进程持续占满 1–2 个逻辑核。根本原因不是 VSCode 本身写得差,而是它默认对工作区做全量文件监听 + 语言服务预热,尤其在有大量小文件的目录下(node_modules、.git、dist)会反复触发 FS 事件和语法分析。
实操建议:
- 立刻在工作区根目录加
.vscode/settings.json,写入:{ "files.watcherExclude": { "**/node_modules/**": true, "**/bower_components/**": true, "**/.git/**": true, "**/dist/**": true, "**/build/**": true }, "search.exclude": { "**/node_modules/**": true, "**/dist/**": true } } - 不要依赖全局设置 —— 某些插件(比如 Prettier、ESLint)会在工作区级重新激活监听,必须在项目内固化排除规则
- 如果用了 TypeScript,顺手关掉自动类型获取:
"typescript.preferences.includePackageJsonAutoImports": "off",否则它会扫描整个node_modules找@types
装了 ESLint 或 Prettier 插件后,保存时卡顿 + 热重启语言服务器
这两个插件默认启用“保存时自动修复”,但它们底层调用的是 Node.js 子进程(如 eslint --fix)。每次保存都 spawn 新进程、加载配置、解析 AST、写回文件 —— 在 M1/M2 Mac 上尤其明显,因为 Rosetta 2 + Node 混合运行会放大开销。
实操建议:
- 把修复时机从
onSave改成onType(仅限轻量规则)或干脆手动触发:"editor.codeActionsOnSave": { "source.fixAll.eslint": false } - 确保项目根目录有
.eslintignore,内容至少包含:node_modules/ dist/ build/ *.min.js
- 禁用插件自带的“自动启用”逻辑:在
settings.json中加"eslint.enable": false,改用脚本命令(如npm run lint:fix)按需执行
Remote-SSH 或 WSL 连接后本地 Mac 风扇狂转
这不是 VSCode 本地的问题,而是 macOS 的 sshfs 或 VSCode Remote 的文件同步机制在后台疯狂轮询远程文件变更。即使你没编辑任何文件,它也会每秒多次 stat 远程目录,导致本地 kernel_task 和 Code Helper 联动升频。
实操建议:
- 改用
Remote-SSH: Open Folder而非Remote-SSH: Connect to Host,前者只挂载目标路径,后者可能拉起整个 home 目录监听 - 在远程服务器的
/etc/ssh/sshd_config中加:UseDNS no和ClientAliveInterval 60,减少连接抖动引发的重连风暴 - 本地禁用远程工作区的搜索监听:
"search.followSymlinks": false,避免跨文件系统遍历
禁用哪些插件能立竿见影降发热
不是所有插件都“看起来有用”。以下几类在 macOS 上实际贡献了 70%+ 的后台 CPU 消耗,且多数用户并不真正需要实时运行:
-
GitLens:默认开启“行级 blame 提示”,每 5 秒扫描 Git 历史,关掉它:"gitlens.advanced.telemetry.enabled": false,再禁用"gitlens.codeLens.enabled": false -
Bracket Pair Colorizer:已废弃,被 VSCode 原生editor.bracketPairColorization.enabled替代,直接卸载 -
Auto Rename Tag:监听所有 HTML/XML 编辑事件,M1 上单标签重命名可卡顿 300ms,换成原生"editor.renameOnType": true -
Path Intellisense:实时扫描整个工作区找路径,和files.watcherExclude冲突,删掉,用原生路径补全即可
复杂点在于:有些插件的开关藏在二级配置里(比如 GitLens 的 gitlens.gitExplorer.files.exclude),光禁用主功能不够。最容易被忽略的是——插件更新后,它的默认行为可能重置,建议每季度检查一次 settings.json 是否仍生效。











