MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法

这篇具有很好参考价值的文章主要介绍了MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

错误场景

最近在开发React的前端微应用,启动时模块构建报错Module build failed, Error: EMFILE: too many open files,

如下图所示: 

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法,React,系统-MacOS,Web前端-Javascript,macos,前端,react.js,javascript,EMFILE

Error: EMFILE: too many open files的错误,经排查是因为单个微应用项目较大,发布过程中已经超过了mac默认的文件监听上限。通常这类错误的原因是因为linux或MacOS的文件句柄数不够导致。

解决方法

解决方式也比较简单,只要修改文件最大上限即可,注意这是临时修改,过了一段时间后,又会恢复到默认的大小。永久修改需要在配置文件中修改,我的临时修改也能满足需求了,就不改配置文件了。

修改 ulimit 命令默认的程序是 launchd. 

首先打开终端,输入launchctl limit并回车,可以看到下图: 

launchctl limit

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法,React,系统-MacOS,Web前端-Javascript,macos,前端,react.js,javascript,EMFILE 

 我们再次输入sudo launchctl limit maxfiles 5000000 5000000并回车,这里会提示输入密码

sudo launchctl limit maxfiles 5000000 5000000

上限值改大点,输入密码即可

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法,React,系统-MacOS,Web前端-Javascript,macos,前端,react.js,javascript,EMFILE

再次查看时,值已被更改 

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法,React,系统-MacOS,Web前端-Javascript,macos,前端,react.js,javascript,EMFILE

 再次启动正常

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法,React,系统-MacOS,Web前端-Javascript,macos,前端,react.js,javascript,EMFILE

 扩展知识:

1、为什么会出现EMFILE,too many open files?

对文件系统进行大量并发调用,操作系统的文件描述符数量会被瞬间用光,抛出EMFILE,too many open files。

异步I/O和同步I/O的显著差距:同步I/O因为每个I/O都是彼此阻塞的,在循环体中,总是一个接着一个调用,不会出现耗用文件描述符太多的情况,同时性能也是低下的;

对于异步I/O,虽然并发容易实现,但是还是需要给予一定的过载保护,防止过分压榨底层系统的性能。

2、Too many open files是Linux、MacOS系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

这里的file更准确的意思文件句柄(file handle),出现这个报错的大多数情况都是文件句柄(file handle)泄露,通俗的说就是文件句柄在不断的被打开,但是在使用完成之后却没有正常的关闭导致文件打开数不断的增加。

文件句柄泄露有多种原因,而不仅仅是打开文件,常见的来源有:套接字,管道,数据库连接,文件。正常情况下服务器本身是不会突然报这个错误的,一定是我们部署到云服务器上面的业务程序打开了太多文件没有关闭导致同时打开的文件数超出了系统的限制

一种情况是程序本身就需要打开很多的文件句柄,这种情况就是打开的文件数大于系统本身的打开文件数限制,这时需要我们将系统的限制调高,就像上面给出的具体方法。

另外一种情况就是我们的程序存在文件句柄使用完成之后没有正常的关闭的情况,通常是网络连接没关闭,文件打开没关闭等等,这时就需要我们修复程序中的bug,确保打开的文件最后都会关闭,网络连接也会关闭。


参考文献

1、Nodejs中Error:EMFILE,too many open files的解决方案_keepupblw的博客-CSDN博客

2、linux 文件句柄数不够 Error: EMFILE: too many open files_Viogs的博客-CSDN博客

3、“too many open files”的原理和解决方案_富士康质检员张全蛋的博客-CSDN博客

4、mac OSX 下修改 ulimit 参数_mac limits.conf_江畔独步的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-724782.html

到了这里,关于MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 若依前端npm run dev启动时报错

    本文主要解决问题:若依前端npm run dev启动时报错,解决办法。 目录 1、第1种解决方案(亲测有效) 2、第2种解决方案(亲测有效)

    2024年02月12日
    浏览(29)
  • vue前端系统启动报错Module not found: Error: Can‘t resolve ‘sass-loader‘

    1、确认项目中是否已安装 node-sass 包。sass-loader 是依赖于 node-sass 包的,如果没有安装 node-sass 包,也会导致无法找到 sass-loader 包。 安装 node-sass 包: 2、确认项目中是否已安装 sass-loader 包。 安装 sass-loader 包:

    2024年02月20日
    浏览(37)
  • 关于启动nginx时报错:error while loading shared libraries: libpcre.so.1

    今天配置好nginx后在sbin目录下执行 ./nginx 时报错如下: 参考了这个帖子 1,首先 find / -name libpcre.so.1 找到该文件的路径。 第一个就是安装在了系统环境的路径。 2,然后 echo 连接路径 3,执行 ldconfig 让修改立即生效 4,执行 ./nginx 启动nginx 5,执行 netstat -tanp 查看网络连接信息

    2024年02月13日
    浏览(43)
  • springboot+dubbo项目启动项目时报错 zookeeper not connected

    项目在公司网络启动时,能正常启动。但通过vpn连接到公司网络时却无法启动报下面的错误 java.lang.IllegalStateException: zookeeper not connected 。 猜测:连接到zookeeper的服务器网络策略不通 — 通过telnet证实端口网络时通的。该猜测不成立。 进一步经过报错的日志,找到对应的源码

    2024年02月11日
    浏览(30)
  • mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file快速解决

    1、可能是/opt/mysql/data/数据目录mysql用户没有权限(修改数据目录的权限) 解决方法 :给予权限,执行 “chown -R mysql.mysql /opt/mysql/data” 然后重新启动mysqld 2、可能进程里已经存在mysql进程 解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”

    2024年02月08日
    浏览(33)
  • mysql启动时报错:error while loading shared libraries: libncurses.so.5: cannot open shared object file

    今天由于项目的需要,特地在redhat9中安装了一套mysql5.7的数据库。前期在安装和配置的过程中没有什么问题,但是在启动mysql的时候报了一个错,报错内容为: 根据报错内容可以看出,是因为在启动mysql的时候加载了libtinfo.so.5库文件。此时我们可以查看redhat9系统中是否存在改

    2024年02月12日
    浏览(42)
  • Docker服务启动时报错:Job for docker.service failed because the control process exited with error

    初学docker,遇见报错信息: Job for docker.service failed because the control process exited with error code. See \\\"systemctl status docker.service\\\" and \\\"journalctl -xe\\\" for details. 方法一: 有可能版本内核没问题 还是这样的话,就是容器引擎失败。 1. 修改 /etc/docker/daemon.json { \\\"storage-driver\\\": \\\"devicemapper\\\" } 2. 修改

    2024年02月05日
    浏览(47)
  • macOS nginx部署前端项目

    1、配置文件地址 根目录是 macOS 文件系统的最顶层目录。您可以在 Finder 中使用快捷键 Shift + Command + G,然后输入 /usr,即可直接打开 /usr 目录。另外,您也可以在终端中使用 cd /usr 命令切换到 /usr 目录 /usr/local/etc/nginx 2、主要代码 在 macOS 上,默认情况下,Nginx 的网站根目录(

    2024年02月11日
    浏览(37)
  • Vue:项目启动时报错These dependencies were not found 解决办法

    在命令提示符中输入下载依赖包的命令 出现错误 原因分析 可能因为npm版本过高,所以对某些命令比npm6.x更严格 解决方案 1、删掉node_moudles文件夹 2、使用npm install –legacy-peer-deps重新安装所有依赖包 每天进步一点点,开心也多一点点

    2024年01月19日
    浏览(37)
  • 【react】创建启动react项目和跨域代理:

    1、创建启动react项目: 2、跨域代理: 【1】文档:https://create-react-app.dev/docs/proxying-api-requests-in-development/ 【2】src/setupProxy.js:

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包