我们正在AmazonLinux中的ApacheTomcat中运行一个web服务。最初web服务运行正常。在发出1000多个web请求后,我们收到了太多的打开文件异常。当我们重新启动tomcat服务器时,这个问题将再次得到解决。
请查看以下例外情况
25-Apr-2016 10:05:52.628 SEVERE [http-nio-8080-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed
java.io.IOException: Too many open files
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:686)
at java.lang.Thread.run(Thread.java:745)
附言:我们在网络服务中没有做任何与文件相关的操作。
这是因为套接字连接被视为文件,所以这意味着您打开了太多的连接。检查限制(每个操作系统有不同的策略——每个服务器也是如此),你可以同时打开多少端口,等等。您可以使用NIO来限制这些事情。
虽然如果在下一行的某个点引发“ulimit”,tomcat将停止导致相同的错误。
所以为了
你需要
现在,您可以在部署相同的新更改后重新检查
看起来,对打开的文件有一些限制。当您在Linux上运行时,我怀疑您的文件描述符已经用完了。
签出ulimit命令以查看允许打开的文件数。
ulimit -n
您可以通过编辑更改打开文件的数量:
/etc/security/limits.conf
并添加如下内容:
* soft nofile 4096
* hard nofile 4096
您可以查看更多有关限制的信息。在这里。
默认限制为1024,对于某些Java应用程序来说可能太低。
有关增加本文中打开的最大文件数的更多信息:http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/
我有一个Kafka生产者代码在Java,使用java nio WatchService api观看新文件的目录,并采取任何新文件,并推到Kafka主题。火花流消费者阅读Kafka主题。我得到以下错误后,Kafka制作人的工作继续运行一天。制作人每2分钟推送大约500个文件。我的Kafka主题有1个分区和2个复制因子。有人能帮忙吗?
问题内容: 我使用多个文件来执行一些文件I / O(写入19个文件,确实如此)。写他们几百次后,我得到了。但实际上我一次只能打开几个文件。这里有什么问题?我可以验证写入是否成功。 问题答案: 在Linux和其他UNIX /类似UNIX的平台上,操作系统对进程在任何给定时间可能具有的打开文件描述符的数量进行了限制。在过去,此限制曾经是硬接线1,并且相对较小。如今,它要大得多(几百/千),并且受“软”
问题内容: 我写了一种测试套件,它占用大量文件。一段时间(2h)之后,我得到了。我仔细检查了所有文件句柄是否再次关闭它们。但是错误仍然存在。 我试图找出使用允许的文件描述符的数量以及当前打开的文件描述符的数量: 因此,如果我运行以下测试: 我得到以下输出: 真奇怪,我期望打开的文件描述符会越来越多。我的脚本正确吗? 我正在使用python的记录器和子进程。那可能是我FD泄漏的原因吗? 谢谢,丹
我们最近在尝试访问Unix服务器中的weblogic控制台时遇到了一个问题,我们将得到: 错误503--服务不可用 在日志文件中,它会指出: 原因:java。io。FileNotFoundException:/opt/weblogic1036/wlserver\u 10.3/server/lib/co 在谷歌上搜索了一番后,我找到了一个解决方案,其中指出/etc/security/limits。c
我有一个错误:PHP无法打开流:打开的文件太多。 我在这里查看了stackoverflow的各种答案,但我无法解决这个问题。我主要尝试增加最大打开文件数的限制: 我已编辑/等/安全/限制。conf,其中我指定了: 保存并注销/重新启动该框后,命令: 仍打印出1024个。我不知道为什么这没有效果,我想这就是我得到php错误的原因。如果需要,我可以粘贴整个文件或任何其他配置文件。我使用的是PHP 5.
问题内容: 考虑这两个python程序: : : 运行。在运行时,启动。两者都将愉快地运行,但是如果当前通过打开文件,则会输出一个空字符串。 我期望会引发异常,告诉我该文件已经打开,但是没有发生,而是文件看起来是空的。为什么会这样?检查它是否已被另一个进程打开的正确方法是什么?可以简单地检查是否返回了空字符串,然后重试直到读取其他内容,或者还有其他更Python化的方法吗? 问题答案: 有关在Py