如何修复React Native启动时Too many open files报错
EMFILE: too many open files 报错修复方案
已安装watchman但问题仍存在时,按以下顺序操作:
- 校验watchman运行权限
终端执行watchman version,如果返回权限类报错,打开「系统偏好设置>安全性与隐私>隐私>完全磁盘访问权限」,为当前使用的终端程序(Terminal.app/iTerm2等)勾选授权,重启终端后重试。 - 调高系统文件打开句柄上限
macOS Catalina默认文件句柄上限偏低,项目依赖较多时即使加载watchman也会触发句柄耗尽:- 临时生效方案(仅当前终端会话有效):执行
ulimit -n 65536后直接启动项目 - 永久生效方案:
新建或编辑/Library/LaunchDaemons/limit.maxfiles.plist文件,写入以下配置:
执行以下命令加载配置,重启电脑后生效:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>65536</string> <string>524288</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist>
重启后执行sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plistulimit -n,返回值为65536即配置生效。
- 临时生效方案(仅当前终端会话有效):执行
- 清理损坏的监听缓存
依次执行以下命令清空watchman历史监听记录和项目临时缓存:watchman watch-del-all watchman shutdown-server rm -rf node_modules/.cache .expo yarn start --clear - 排查目录同步冲突
若项目存放在iCloud云盘、第三方同步网盘目录下,同步程序会占用大量文件监听句柄,将项目移动到本地非同步目录(如~/Development路径)后再启动。 - 修复Node版本兼容问题
当前使用的Node 16.14.2存在fs.watch模块已知bug,切换到16.18.0及以上的16.x LTS版本即可(避开Node 17版本,符合Expo兼容要求)。
内容的提问来源于stack exchange,提问作者DillonB07
相关产品推荐
相关产品推荐

