VSCode主进程OOM必须用code --max-memory=4096终端启动,--max-old-space-size对其无效;该参数仅限Electron 12+主进程,单位MB,需搭配--disable-extensions和--disable-gpu减负,桌面启动无效。

code --max-memory=4096 必须终端启动才生效
VSCode 主进程是 Electron 渲染进程,不是 Node.js 进程,--max-old-space-size 对它完全无效;真正管用的是 --max-memory,但只在终端启动时起作用。桌面图标、Dock、Finder 双击或 Windows 快捷方式“目标”字段里加这个参数,新版 Electron(12+)直接忽略——它压根不读。
正确姿势只有这一种:code --disable-extensions --disable-gpu --max-memory=4096 .
其中 --max-memory 单位是 MB,仅限制主进程 RSS 内存,不影响 Extension Host 或子进程;--disable-extensions 和 --disable-gpu 是配套减负动作,尤其 macOS 外接显示器时 --disable-gpu 能省 200–500MB。
- Windows 用户别在快捷方式里硬塞
--max-memory,白配 - 值设 4096 是较稳上限,超过后主进程反而容易因内存碎片提前崩溃
- 改完不重启 VSCode,参数不会加载;关掉所有窗口再重开
Extension Host 内存爆了,--max-memory 压不住
Extension Host 是独立的 Node.js 进程,和主进程内存隔离。--max-memory 对它没任何影响。你看到它卡在 500MB 不降,大概率是插件泄漏或监听器常驻——比如 GitLens、esbenp.prettier-vscode、ms-python.python 启动就建大量文件监听或缓存 AST。
排查路径很明确:
Cmd+Shift+P / Ctrl+Shift+P → 输入 Developer: Show Running Extensions → 看 Memory 列数值;
禁用可疑插件后,必须关闭整个 VSCode 窗口(不只是 Reload Window),否则旧 Extension Host 进程 PID 不变,内存照涨不落。
- 光禁用插件不关窗口 = 白禁
- 想强杀:Cmd+Shift+P →
Developer: Open Process Explorer找到对应 PID,系统级kill -9 [PID] -
files.watcherExclude配错位置或格式(比如漏掉尾部/或写成"**/node_modules")等于没配
npm run build 崩溃不是 VSCode 的锅,别乱加 --max-old-space-size
你在内置终端敲 npm run build 报 JavaScript heap out of memory,错误发生在 CLI 工具(如 vite、vue-cli-service)启动的独立 Node.js 子进程里,和 VSCode 主界面毫无关系。--max-old-space-size=4096 必须加给那个子进程,不是加给 code 命令本身。
最稳妥改法是直接改 package.json:"build": "node --max-old-space-size=4096 ./node_modules/vite/bin/vite.js build"
Windows 下若用 vue-cli-service,得套 cross-env:"dev": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vue-cli-service serve"
- 别在系统环境变量里全局设
NODE_OPTIONS,会污染本地 mock server、API 脚本等所有 Node 进程 - 值超过 4096MB 很少真解决问题,反而掩盖
search.exclude漏配或构建时全量扫描node_modules这类根本问题 - 远程开发时同理:要调远端
tsserver内存,得配remote.SSH.remoteServerEnv,不是本地code启动参数
settings.json 里那些内存相关配置,各管一摊
settings.json 里的内存设置不是万能开关,每个只对特定子系统生效,混用会失效:
-
"typescript.tsserver.maxTsServerMemory": 4096→ 只管本地 TypeScript 语言服务进程(单位 MB) -
"javascript.tsserver.maxTsServerMemory": 4096→ 同上,针对 JS 项目 -
"files.maxMemoryForLargeFilesMB": 200→ 控制单个文件加载内存上限,超阈值自动降级为二进制模式,改完必须重启 -
"terminal.integrated.maximumMemory": 4096→ 仅限集成终端的内存软限制,实际效果有限
这些配置都得写在项目根目录的 .vscode/settings.json 才能在多工作区下稳定生效;用户级或全局设置,在复杂工作区里大概率被绕过。
真正难搞的从来不是参数填多少,而是哪一层进程该用哪个参数、在哪配、配完要不要关窗口、关不关窗口会不会让旧进程继续吃内存——这些细节错一个,调再大也没用。


















