【问题标题】:Tomcat Error Too Many open filesTomcat错误太多打开的文件
【发布时间】:2013-11-03 06:39:38
【问题描述】:

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


堆栈错误:严重:套接字接受失败 java.net.SocketException:在 java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398) 在 java.net.PlainSocketImpl.socketAccept(Native Method) 的打开文件太多.net.ServerSocket.implAccept(ServerSocket.java:530) at java.net.ServerSocket.accept(ServerSocket.java:498) at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(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);返回名称;

对这个错误有什么建议吗?

【问题讨论】:

  • ulimit 好像有问题。请提供更多详细信息,例如操作系统和错误消息。有没有堆栈错误?
  • 操作系统可能会限制进程可以打开的文件数量。也许您在处理完文件后没有关闭它们?
  • 堆栈错误:严重:套接字接受失败 java.net.SocketException:在 java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java)的 java.net.PlainSocketImpl.socketAccept(本机方法)打开的文件太多:398) 在 java.net.ServerSocket.implAccept(ServerSocket.java:530) 在 java.net.ServerSocket.accept(ServerSocket.java:498) 在 org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory. java:61) 在 org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352)
  • Linux 服务器,这是我最后一次更新代码以获取基于语言的消息。 ApplicationContext context = new ClassPathXmlApplicationContext("app-context.xml"); name = context.getMessage(key, null, locale);返回名称;

标签: tomcat


【解决方案1】:

问题几乎可以肯定是您在代码中的某处泄漏了文件句柄。我有 Tomcat 可以一次熬夜几个月而没有遇到这种情况。

【讨论】:

  • 如何识别文件泄露。因为我正在为 ORM 使用休眠。是关于 JDBC 连接的吗?还是读取属性文件?
【解决方案2】:

虽然如果“ulimit”在某个点引发,tomcat 会停止导致相同的错误。

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

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

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

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 2019-05-01
    • 1970-01-01
    • 2014-06-08
    • 2014-10-03
    • 2010-12-07
    • 1970-01-01
    • 2014-06-23
    • 2016-03-17
    相关资源
    最近更新 更多