Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBoss AS 4.2.3-GA中打开的文件过多异常_Java_Websocket_Jmx_Jboss 4.2.x - Fatal编程技术网

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

Java JBoss AS 4.2.3-GA中打开的文件过多异常,java,websocket,jmx,jboss-4.2.x,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.PlainSo

我想解决这个问题,实际上我不清楚当我的应用程序在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命令是
ulimit
lsof

我建议您首先了解可以更改进程的最大打开文件数。只需在命令行上键入
ulimit
,就可以得到ulimit的默认值。例如,对我来说:

$ ulimit
unlimited
我运行的是香草版Ubuntu11.04发行版,所以默认的版本是unlimited。在我的大多数生产框中,默认值为1024

接下来,
lsof-p
,它将列出进程id为的所有打开的文件

也许您会发现,您可能没有关闭您认为是关闭的文件,或者只是打开了太多的文件(基于ulimit设置的限制)

下一步,您将运行一个Java进程,以便在出现打开文件过多的情况时获得进程的线程转储。要获取线程转储,请向进程发送一个
kill-3
,或者如果您已经在当前shell中启动了Java进程,则可以键入CTRL-Break以获取线程转储。在一分钟或两分钟内收集3个或更多线程转储尤其有用,从这些线程转储集合中,因此线程转储中存在的线程值得一看

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


以下是调试打开的文件过多情况的一些提示。可以提供帮助的两个unix命令是
ulimit
lsof

我建议您首先了解可以更改进程的最大打开文件数。只需在命令行上键入
ulimit
,就可以得到ulimit的默认值。例如,对我来说:

$ ulimit
unlimited
我运行的是香草版Ubuntu11.04发行版,所以默认的版本是unlimited。在我的大多数生产框中,默认值为1024

接下来,
lsof-p
,它将列出进程id为的所有打开的文件

也许您会发现,您可能没有关闭您认为是关闭的文件,或者只是打开了太多的文件(基于ulimit设置的限制)

下一步,您将运行一个Java进程,以便在出现打开文件过多的情况时获得进程的线程转储。要获取线程转储,请向进程发送一个
kill-3
,或者如果您已经在当前shell中启动了Java进程,则可以键入CTRL-Break以获取线程转储。在一分钟或两分钟内收集3个或更多线程转储尤其有用,从这些线程转储集合中,因此线程转储中存在的线程值得一看

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


我想你在关注这个问题-

我想你在关注这个问题-

谢谢你提供的信息。抱歉,我不明白使用kill-3命令可以做什么。另外,我已经安装了一个最新的JVM java版本“1.6.0_26”java(TM)SE运行时环境(build 1.6.0_26-b03)java HotSpot(TM)64位服务器VM(build 20.1-b02,混合模式)还请记住,网络连接在linux上算作打开的文件。由于过度的开放连接,我在Tomcat和ActiveMQ中都遇到了“打开的文件太多”的问题。它会给你一个线程转储。我想它会把它写到一个文件里,但我记不清了。首先用lsof进行实验。这可能会显示您的问题。+1文件描述符限制肯定是罪魁祸首。lsof将显示哪些资源处于打开状态,哪些资源未正确关闭。请查看有关信息的列表。抱歉,我不明白使用kill-3命令可以做什么。另外,我已经安装了一个最新的JVM java版本“1.6.0_26”java(TM)SE运行时环境(build 1.6.0_26-b03)java HotSpot(TM)64位服务器VM(build 20.1-b02,混合模式)还请记住,网络连接在linux上算作打开的文件。由于过度的开放连接,我在Tomcat和ActiveMQ中都遇到了“打开的文件太多”的问题。它会给你一个线程转储。我想它会把它写到一个文件里,但我记不清了。首先用lsof进行实验。这可能会显示您的问题。+1文件描述符限制肯定是罪魁祸首。lsof将显示哪些资源已打开且未正确关闭。虽然您提供的链接可能是问题的答案,但您应该在此处发布相关信息。虽然您提供的链接可能是问题的答案,但您应该在此处发布相关信息。