Apache Tomcat异常 - 打开的文件太多

时间:2016-04-26 11:21:02

标签: java apache tomcat

我们正在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服务中执行任何与文件相关的操作。

2 个答案:

答案 0 :(得分:9)

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

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

notificationHolder.checkParentView.setTag(itemsData.ge(position));
notificationHOlder.checkParentView.setOnClickListener(checkedListener);
private View.OnClickListener checkedListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        int positon = (Integer) v.getTag();
    }
};

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

ulimit -n

并添加如下内容:

/etc/security/limits.conf

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

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

有关增加本文中最大打开文件数的详细信息:http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

答案 1 :(得分:3)

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