升级MacOS 10.15.7后Parallels内VS Node.js项目报too many open files求助
问题核心定位
此前在Mac终端执行的sudo launchctl limit maxfiles 65536 200000调整的是Mac宿主机自身的文件句柄上限,本次报错的EMFILE: too many open files来自Parallels运行的Windows虚拟机内部的进程资源限制,宿主机的配置修改没有触达虚拟机的资源管控链路,因此操作完全无效。
从异常现象判断,macOS 10.15.7升级后,Parallels的共享文件夹映射层存在文件句柄泄漏的兼容问题:控制台应用扫描文件量少,不会触发句柄耗尽;Web项目需要一次性加载node_modules下上千个依赖文件,会快速耗尽映射层的句柄配额,直接报出成百上千行的文件打开失败错误。
可落地解决步骤
- 调整项目运行路径,绕开Parallels共享映射层
当前报错路径c:\Users\chris\github\CollegeTennisRanks\...本质是Parallels把Mac本地的github目录映射成了Windows的盘内路径,并非真正存在于Windows虚拟机磁盘内。将项目完整复制到Windows虚拟机内部的本地磁盘路径下(比如C:\Dev\CollegeTennisRanks),重新用Visual Studio打开本地路径的项目运行,可直接规避映射层的句柄泄漏问题。 - 调整Windows虚拟机内部的文件句柄配置
如果项目迁移到虚拟机本地磁盘后仍存在偶发报错,需要在Windows系统内(非Mac终端)调整配置:- 以管理员身份打开Windows命令提示符,执行命令
fsutil behavior set memoryusage 2,提升Windows系统可用的非分页缓存池大小,增加系统层面的文件句柄配额 - 暂停
Windows Search服务,取消项目文件夹的内容索引权限,避免索引进程抢占文件句柄
- 以管理员身份打开Windows命令提示符,执行命令
- 减少Visual Studio对node_modules的不必要扫描
报错日志里的Source Map预加载逻辑,是VS会主动扫描全量node_modules下的文件生成预加载缓存,在句柄配额不足时会快速触发EMFILE报错:- 打开VS设置面板,进入「工具-选项-项目和解决方案-TypeScript/JavaScript」,取消勾选「启用对生成的脚本的Source Map预加载」
- 删除项目目录下的
obj临时文件夹(就是报错路径里obj/Release/Package/PackageTmp对应的目录,属于VS打包生成的冗余临时文件,会被重复扫描占用句柄),重新还原项目依赖后再运行
- 修正Parallels的共享配置兼容设置
- 打开Parallels虚拟机配置面板,进入「硬件-共享文件夹」,将共享模式从「共享Mac」切换为「仅主机共享」
- 将Parallels版本更新至15.1.3及以上,该版本已修复macOS 10.15.7环境下共享文件夹的文件句柄泄漏已知问题
内容的提问来源于stack exchange,提问作者Chris H
相关产品推荐
相关产品推荐

