java - JBoss AS 4.2.3-GA 中打开文件过多异常

标签 java websocket jmx jboss-4.2.x

我想解决这个问题,实际上我不清楚当我的应用程序在 CentOs 环境上运行时会发生什么,几天后我开始出现以下异常:

2011-07-12 21:58:03,598 12155907 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)
2011-07-12 21:58:03,600 12155909 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)
2011-07-12 21:58:03,600 12155909 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)
2011-07-12 21:58:03,601 12155910 ERROR [org.jboss.naming.Naming] (JBoss System Threads(1)-2:) Naming accept handler stopping
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
    at java.net.ServerSocket.implAccept(ServerSocket.java:462)
    at java.net.ServerSocket.accept(ServerSocket.java:430)
    at org.jnp.server.Main$AcceptHandler.run(Main.java:481)
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:148)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
    at java.lang.Thread.run(Thread.java:662)

日志开始快速增长...我在应用程序中使用一些 JBOSS 队列以及一些 JMX 连接,我想知道如何快速检测问题或者这是否是由计算机中的其他组件引起的。任何建议,请我完全担心这个问题。

最佳答案

以下是一些有关调试打开文件过多情况的提示。两个可以提供帮助的 UNIX 命令是 ulimitlsof

我建议你man ulimit首先要了解您可以更改进程的最大打开文件数。只需输入 ulimit命令行上将为您提供 ulimit 的默认值。以我为例:

$ ulimit
unlimited

我在普通的 Ubuntu 11.04 发行版上运行,所以看起来默认是无限制的。在我的大多数生产机器上,默认值为 1024。

下一步,lsof -p <pid>这将列出 ID 为 的进程的所有打开文件。

也许您会发现您要么没有像您想象的那样关闭文件,要么只是打开了太多文件(基于设置的 ulimit 限制)?

下一步,您将运行一个 Java 进程,以便在发生“打开文件过多”情况时获取进程的线程转储。要获取线程转储,请向进程发送 kill -3 <pid>或者,如果您已在当前 shell 中启动 Java 进程,则可以键入 CTRL-Break 来获取线程转储。在(比如说一两分钟内)从这个线程转储集合中收集 3 个或更多线程转储特别有帮助,因此线程转储中存在的线程值得一看。

如果这些都对您没有帮助,请搜索“太多打开的文件”。我找到了这个链接,接受的答案可能会对您有所帮助

Java Too Many Open Files

关于java - JBoss AS 4.2.3-GA 中打开文件过多异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681363/

相关文章:

java - GET 方法请求适用于所有其他类型的请求

java - 如何使用 Apache FOP 1.0 从包含日语字符的 XML 创建 PCL 文档?

Java websocket : How to receive PongMessage from websocket client and respond to this message

javascript - 如果我在创建客户端后没有立即连接,则使用 sockjs-client 和 stompjs 的 WebSocket 无法连接

java - 在没有NotificationPublisherAware的情况下使用Spring发布JMX通知

soap - 什么协议(protocol)提供者通过 SOAP 连接到 WebSphere 上的 JMX?

java - 提供依赖项和 JBOSS EAP 7

java - 在 Amazon EMR 中运行 hadoop jar

java - jetty websockets 仅服务器 - 无 http 服务器 - 删除 404 错误

jmx - Java的jps工具内部使用了哪个API?