vscode远程开发cpu高主因是远程extension host或vscode-server的node.js子进程失控,应ssh进服务器用ps aux和lsof定位高占用进程,修改远程~/.vscode-server/data/machine/settings.json中files.watcherexclude(必须用**通配符)并设extensions.experimental.affinity控制插件运行位置,重启窗口且清理残留server进程。

VSCode 连远程开发时 CPU 占用高,90% 以上是 Extension Host 或 vscode-server 里的 Node.js 子进程在狂跑,不是网络卡、也不是你代码慢——它正在远程服务器上反复解析、监听或索引文件。
怎么看是哪个进程在吃 CPU
别看本地任务管理器里“Code Helper”,那只是壳。真凶藏在远程服务器上:
- SSH 进入远程机器,执行
ps aux --sort=-%cpu | head -10,重点找带node、vscode-server、pylance、tsserver、prettier字样的进程 - 记下高占用进程的 PID,再运行
lsof -p [PID],看它正在读哪些路径——如果大量打开node_modules/**或dist/**下的文件,基本坐实是文件监听失控 - 执行
code --status(在远程终端中运行)也能直接列出各子进程 CPU/内存,但前提是 VSCode Server 已启动且没卡死
为什么 files.watcherExclude 在远程不生效
很多人把配置写在本地 settings.json,结果远程照样满载——因为远程开发时,VSCode 默认用远程服务器上的配置,不是你本机的。
- 必须改远程路径:
~/.vscode-server/data/Machine/settings.json(注意不是~/.vscode/extensions/...) - 配置项要完整,不能只写一行:
"files.watcherExclude": { "**/node_modules/**": true, "**/dist/**": true, "**/.git/**": true } - 双星号
**是硬性要求,写成*node_modules*或/node_modules/完全无效 - 改完必须关闭并重新打开远程窗口(不是重载窗口),否则设置不加载
extensions.experimental.affinity 怎么设才不翻车
这个配置控制插件在哪边跑:本地还是远程。设错会导致语言功能失效,或者 CPU 换个地方爆。
- 全局强制本地运行(最省远程资源):
{"extensions.experimental.affinity": {"*": 0}}—— 但部分插件(如ms-python.python的核心 LSP)不支持 UI 扩展模式,会直接报错或失能 - 只让特定插件远程跑:
{"extensions.experimental.affinity": {"ms-python.python": 1, "esbenp.prettier-vscode": 0}},数值1= 仅远程,0= 仅本地 - 别混用:同一个插件不能既设
0又设1;通配符*优先级最高,会覆盖后面的具体条目 - 改完要重启远程窗口,且确认插件状态栏图标是否还在(比如 Python 解释器选择、Prettier 格式化按钮)
远程 vscode-server 内存越跑越多停不下来
这不是泄漏,是 VSCode 的沙箱机制:每个插件实例默认独占 V8 isolate,大项目里 AST 缓存、类型推导树不会主动 GC,尤其老版本(1.75 之前)对 typescript-language-features 缓存管理很松。
- 检查远程
ps aux | grep node,如果看到多个node ... tsserver或pyright进程长期驻留,说明语言服务没被正确回收 - 临时缓解:在远程
settings.json中加"typescript.preferences.includePackageJsonAutoImports": "off",避免扫描整个node_modules/@types - 根治办法:升级远程
vscode-server到 1.85+,新版对 LSP 进程生命周期和内存回收做了显著优化 - 别忽略系统限制:Linux 上运行
cat /proc/sys/fs/inotify/max_user_watches,低于524288就得调高,否则 watcher 会静默失败并不断重试,CPU 看似不高,但内存持续爬升
真正容易被忽略的是:远程配置改了,但旧的 vscode-server 实例还在后台跑着。每次连上 Remote-SSH,VSCode 都可能复用旧进程——得手动 kill -9 掉残留的 node 和 code-server 进程,再重连,否则所有优化都白搭。











