vs code 内存占用高主因是扩展、文件监听和语言服务器失控;通过 process explorer 定位高 rss 扩展,禁用 python/eslint/gitlens/remote-ssh 等重灾区插件,配置 files.watcherexclude 排除 node_modules 等目录,并调整 argv.json 参数可显著降内存。

VS Code 内存占用高,90% 以上不是编辑器本身问题,而是扩展、文件监听或语言服务器失控导致的——关掉几个插件、加几行配置、重启一次窗口,内存常能从 1.5GB 直降到 400MB 以内。
如何快速定位吃内存的扩展
别猜,直接看真实进程:按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入并执行 Developer: Open Process Explorer。重点关注 Extension Host 进程下的子项,右侧显示的 RSS 值就是实际内存占用。
- 找到 RSS > 300MB 的扩展名(如
ms-python.python、esbenp.prettier-vscode、gitlens),右键 →Disable Extension - 禁用后必须完全关闭当前窗口(不只是重载),再重新打开工作区,否则旧进程仍驻留
-
ms-vscode.js-debug在调试中临时升高属正常;但长期 > 500MB,要检查是否 source map 循环加载或断点设在高频触发位置
哪些扩展最该优先禁用或调低权重
Python、ESLint、GitLens、Remote - SSH 这四类是内存“重灾区”,它们不是“装着不用”就没事,而是默认启动即加载大量服务:
-
Python扩展:启用 Pylance 时会预加载整个依赖树类型信息;可改用轻量pylsp,或在settings.json中设"python.analysis.extraPaths": []清空额外路径 -
ESLint:全量校验大项目时可能占 800MB+;设"eslint.run": "onType"并精简"eslint.probe"(例如只保留["javascript", "typescript"]) -
GitLens:默认开启历史图谱和行级 blame;关掉"gitlens.codeLens.enabled"和"gitlens.hovers.enabled"可降 30%–50% 内存 -
Remote - SSH:远程工作区未清理缓存时,~/.vscode-server下残留进程常驻;退出后手动ps aux | grep 'vscode-server'+kill -9清理
不加 files.watcherExclude 就等于放任 inotify 泄漏
VS Code 默认递归监听整个工作区,遇到 node_modules(几万小文件)、dist、.git 时,内核级 inotify 句柄持续增长且几乎不回收——这是最隐蔽、最顽固的内存爬升来源。
- 在项目根目录的
.vscode/settings.json中必须添加:
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/.git/**": true,
"**/*.log": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true
}
}
cat /proc/sys/fs/inotify/max_user_watches,若低于 524288,运行 echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
** 是必须的,写成 * 或 */node_modules/* 无效启动参数与底层限制调整
VS Code 默认用 1GB 堆上限跑渲染进程,某些场景下需手动干预;但参数不是越多越好,关键看设备环境:
- 低配机器(如 M1 Air / Intel i3 笔记本):在
argv.json中加"disable-hardware-acceleration": true,或终端启动时加code --disable-gpu - 高性能设备(M 系列 Mac / RTX 笔记本):反而应确保 GPU 加速开启,并加
"enable-gpu-rasterization": true提升流畅度 - 分离扩展主机进程:在
argv.json中设"extensionHostMode": "local-process",避免多个扩展争抢同一进程资源 - 禁用自动更新和推荐插件:
"extensions.autoUpdate": false、"extensions.ignoreRecommendations": true,防止后台静默拉起新进程
真正难处理的从来不是单个设置,而是多个高开销扩展叠加 + 默认监听未排除 + 语言服务器全量加载这三者同时生效——哪怕你只打开一个 JS 文件,node_modules 里的每个 .d.ts 都可能被 TypeScript 语言服务器反复解析三次。动手前先跑一遍 code --status,比盲目调参快十倍。











