直接加--max-old-space-size=4096对Extension Host无效,因其OOM崩溃需通过Developer: Show Running Extensions查实时内存占用,禁用高耗插件(如GitLens、Prettier、Python),并严格配置files.watcherExclude排除node_modules等目录,禁用后须彻底关闭窗口再重开。

直接加 --max-old-space-size=4096 不管用——因为“扩展主机已关闭”不是 Node 子进程崩了,而是 Extension Host 进程自己 OOM 退出,它不认这个参数。
Extension Host 崩溃时看不准内存用量?先开 Developer: Show Running Extensions
你看到的“已关闭”其实是结果,不是原因。真正要盯的是崩溃前它吃了多少内存。
- 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入并运行Developer: Show Running Extensions - 列表里每个插件旁的数字是实时估算内存(MB),不是启动时分配量;持续 >120MB 的要重点怀疑
-
GitLens、esbenp.prettier-vscode、ms-python.python这三类最常卡在高内存不动,尤其打开大 JSON 或日志文件后 - 数值显示
N/A不代表没事,很可能是插件内部泄漏导致 V8 无法统计,直接禁用再验证
files.watcherExclude 写错等于没配,路径必须严格匹配
VSCode 默认监听整个工作区,node_modules 里几万个小文件会吃光 inotify 句柄,最终拖垮 Extension Host —— 这和插件本身是否“写得差”无关,是系统级资源耗尽。
- 必须写进项目根目录的
.vscode/settings.json,全局设置经常失效 - 正确写法是:
"**/node_modules/**": true,写成"node_modules/**"、"*/node_modules/*"或"/node_modules/"全部无效 - 顺手加上:
"**/dist/**": true、"**/.git/**": true、"**/*.log": true - 改完必须完全关闭 VSCode 窗口(macOS 要退出菜单栏图标),再重新打开项目才生效
禁用插件后还崩溃?旧进程根本没退
点“Disable”只是阻止下次加载,正在跑的 Extension Host 子进程照常吃内存,不杀干净就白禁。
- 禁用目标插件后,必须完全关闭当前窗口(
Developer: Reload Window不行) - 仍不稳?按
Ctrl+Shift+P运行Developer: Open Process Explorer,找 CPU% >30% 的Extension Host行,右键复制命令行,看有没有含pyright、tsserver、prettier等关键词 - Linux/macOS 下可手动清理:
ps aux | grep -i "pyright\|tsserver\|python.*language",找到 PID 后kill -9 [PID] - Windows 用户注意:
set NODE_OPTIONS=--max-old-space-size=4096对 GUI 启动的 VSCode 无效,那是给 npm 脚本用的
真正难处理的从来不是单个插件,而是多个语言服务(比如 ms-python.python + ms-python.pylance)同时加载 AST 缓存,或者 prettier + eslint + editorconfig 在保存时触发嵌套格式化——这些冲突不会立刻报错,但内存会缓慢爬升到临界点才断电式退出。


















