Tomcat错误太多打开文件

时间:2013-11-03 06:39:39

标签: tomcat

我想知道太多文件打开错误的确切问题。我通过谷歌寻求解决方案但我无法理解为什么会出现这个问题以及如何解决问题。关于ulimit价值的一些事情是什么?


堆栈错误:严重:套接字接受失败java.net.SocketException:在java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)的java.net.PlainSocketImpl.socketAccept(Native Method)中打开太多文件位于org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket的java.net.ServerSocket.accept(ServerSocket.java:498)上的.net.ServerSocket.implAccept(ServerSocket.java:530)(DefaultServer SocketFactory.java:61 )org.apache.tomcat.util.net.JIoEndpoint $ Acceptor.run(JIoEndpoint.java:352) - user2883376昨天

Linux服务器,这是我在代码中的最后一次更新,用于根据语言获取消息。 ApplicationContext context = new ClassPathXmlApplicationContext(“app-context.xml”); name = context.getMessage(key,null,locale);返回名称;

有关此错误的任何建议吗?

2 个答案:

答案 0 :(得分:4)

问题几乎可以肯定是您在代码中的某处泄漏了文件句柄。我让Tomcats一次熬几个月而不遇到这个。

答案 1 :(得分:-1)

虽然如果在某一点上升“ulimit”,tomcat会停止导致相同的错误。

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

您需要修复代码才能加载只能在类的静态块中编写的文件。因此,即使任意数量的用户进行多次点击,也只加载一个文件。

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