【问题标题】:Apache Tomcat Exception - Too many open filesApache Tomcat 异常 - 打开的文件太多
【发布时间】:2016-08-20 04:40:08
【问题描述】:

我们正在 Amazon Linux 中的 Apache Tomcat 中运行 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)

PS : 我们没有在 web 服务中做任何文件相关的操作。

【问题讨论】:

  • 您是否在 google 上搜索过太多打开的文件?
  • 你用的是什么操作系统??
  • 我们使用的是亚马逊 Linux

标签: java apache tomcat


【解决方案1】:

虽然如果“ulimit”在某个点被提升,tomcat 会停止导致同样的错误。

因此,为了避免这种情况,您可以使用命令“lsof -u username”或简单地“lsof”检查 Linux 上应用程序用户的打开文件列表,并查看代码相关文件是否打开(例如..properties 文件)如果是这样,请使用该特定 tomcat 用户的 # kill -9 lsof -t -u username 命令杀死这些特定文件。

您需要修复您的代码以加载这些文件,这些文件仅写入您的类的静态块中。这样即使任意数量的用户多次点击,也只会加载一个文件。

现在您可以在使用相同的 lsof 命令部署新更改后重新检查并查看。只会看到一个文件。这将永久解决您的问题,而无需每次都提高 ulimit

【讨论】:

    【解决方案2】:

    这是因为套接字连接被视为文件,这意味着您打开的连接太多。检查限制(每个操作系统有不同的策略 - 每个服务器也一样),您可以同时打开多少个端口等。您可以使用 NIO 来限制这些事情。

    【讨论】:

      【解决方案3】:

      看起来,打开的文件有一些限制。当你在 Linux 上运行时,我怀疑你的文件描述符用完了。

      查看 ulimit 命令以查看允许打开的文件数。

      ulimit -n
      

      您可以通过编辑来更改打开文件的数量:

      /etc/security/limits.conf
      

      并添加如下内容:

      * soft nofile 4096
      * hard nofile 4096
      

      您可以查看有关 limits.conf here 的更多信息。

      默认限制为 1024,对于某些 Java 应用程序来说可能太低了。

      更多关于增加最大打开文件数的信息见这篇文章:http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 2017-01-20
        • 2015-11-30
        • 2014-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多