根本原因是vscode默认将所有插件(尤其lsp类)在远程运行,导致cpu/内存暴涨;应通过settings.json配置extensions.experimental.affinity控制插件本地/远程运行,并排除node_modules等目录监听、升级vscode-server、清理旧server实例。

VSCode Remote-SSH 插件宿主进程(node 或 vscode-server)吃满 CPU 怎么办
根本原因不是“插件太多”,而是 VSCode 默认把所有插件(尤其语言服务器、格式化、LSP 类)全拉到远程服务器上运行,本地只做 UI 渲染。一旦某个插件有内存泄漏、递归扫描、或对大项目响应慢,node 进程就会卡死或狂占 CPU。
实操建议:
- 在远程服务器的
~/.vscode-server/data/Machine/settings.json中手动添加限制(注意:不是本地的settings.json):{ "extensions.experimental.affinity": { "*": 0 } }这会强制所有插件在本地运行(仅限支持“UI 扩展”的插件),大幅降低远程负载 - 如果必须在远程运行某插件(比如
ms-python.python依赖的pylsp),单独给它设 affinity:{ "extensions.experimental.affinity": { "ms-python.python": 1 } }数值1表示“仅远程”,0表示“仅本地” - 禁用远程端不必要的插件:在远程窗口中按
Ctrl+Shift+P→ 输入Extensions: Show Installed Extensions→ 点击右上角…→ 选Disable (Remote),不是Disable (Workspace)
为什么 vscode-server 启动后内存持续上涨停不下来
常见于开启文件监视(file watching)的插件,比如 esbenp.prettier-vscode、stylelint.vscode-stylelint,它们默认监听整个工作区,遇到 node_modules 或构建产物目录时会触发大量 fs 事件,Node.js 事件循环被撑爆。
实操建议:
- 在远程
settings.json中加:"files.watcherExclude": { "**/node_modules/**": true, "**/dist/**": true, "**/build/**": true } - 关掉非必要语言服务:例如禁用
typescript.tsserver.enable(设为false),改用本地 TS 插件 +tsc --noEmit检查 - 检查
ps aux | grep node,找出高耗插件进程 PID,再用lsof -p PID看它在读哪些路径——往往暴露了未 exclude 的巨型日志或缓存目录
Remote-SSH 连接后 code-server 占用 2GB+ 内存还越跑越多
这不是 bug,是 VSCode 为兼容性保留的“插件托管沙箱”行为:每个插件实例默认分配独立 V8 isolate,且不主动 GC 大对象(比如语法树、AST 缓存)。尤其在老版本(1.75 之前)中,typescript-language-features 的缓存策略极激进。
实操建议:
- 升级远程
vscode-server到1.80+:新版引入--disable-extensions启动参数,并优化了 LSP 进程复用逻辑 - 连接时加启动参数(在 SSH 配置里):
Host my-remote HostName xxx RemoteCommand /path/to/code-server --disable-extensions --port=0
再配合本地启用必要插件 - 用
code --status(在远程终端执行)查看各扩展实际内存占用,重点关注Extension Host和Shared Process两栏
想彻底规避远程插件资源争抢,但又需要完整语言功能怎么办
核心矛盾在于:远程开发要功能,又要轻量。硬砍插件不是解法,关键是“分层托管”——把重逻辑放本地,轻代理留远程。
实操建议:
- 用
ms-vscode-remote.remote-ssh连接,但把语言服务器换成本地启动的tcp代理:例如本地运行pyright --stdio并监听localhost:7777,远程端配置"python.languageServer": "Pylance"→ 改为"python.languageServer": "None",再通过settings.json指定"python.serverPort": 7777 - 对 Rust/C++ 等,直接禁用远程
rust-analyzer或clangd,改用本地cargo check --message-format=json+compile_commands.json同步机制 - 别信“远程开发就该全搬过去”的惯性思维——VSCode Remote 架构本就支持混合模式,只是默认没开而已
最易被忽略的一点:远程 ~/.vscode-server 目录下可能残留多个旧版本 server 实例,它们共享同一套 extensions 缓存但各自加载,导致内存叠加。定期清理 ~/.vscode-server/bin/* 里不用的哈希目录,比调参数更立竿见影。











