Слишком много открытых файлов Исключение в JBoss AS 4.2.3-GA - PullRequest
0 голосов
/ 13 июля 2011

Я хочу исправить эту проблему, у меня на самом деле нет четкого представления о том, что происходит, когда мое приложение работает в среде 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 QUEUES в своем приложении, а также некоторые соединения JMX, я хочу знать, как быстро обнаружить проблему или это вызвано другим компонентом компьютера. Любые предложения, пожалуйста, я полностью обеспокоен этой проблемой.

Ответы [ 2 ]

5 голосов
/ 13 июля 2011

Вот несколько советов по отладке ситуации Too Many Open Files. Две команды Unix, которые могут быть полезны: ulimit и lsof

Я предлагаю вам man ulimit сначала понять, что вы можете изменить максимальное количество открытых файлов для процесса. Просто набрав ulimit в командной строке, вы получите значение по умолчанию для ulimit. Например, для меня:

$ ulimit
unlimited

Я работаю на ванильном дистрибутиве Ubuntu 11.04, так что, похоже, значение по умолчанию - неограниченное. На большинстве моих производственных ящиков значение по умолчанию - 1024.

Далее lsof -p <pid>, в котором перечислены все открытые файлы для процесса с идентификатором .

Возможно, вы обнаружите, что вы либо не закрываете файлы, когда думали, что это так, либо просто открываете слишком много файлов (в зависимости от установленного лимита ulimit)?

Следующим шагом вы запускаете процесс Java, чтобы вы могли получить дамп потока вашего процесса, когда происходит ситуация Too Many Open Files. Чтобы получить дамп потока, отправьте процессу kill -3 <pid> или, если вы запустили процесс Java в текущей оболочке, вы можете нажать CTRL-Break, чтобы получить дамп потока. Особенно полезно собрать 3 или более дампов потоков, скажем, минуту или две, и из этой коллекции дампов потоков, поэтому стоит взглянуть на потоки, которые существуют в дампах потоков.

Если вам ничего не помогает, поищите «слишком много открытых файлов». Я нашел и нашел эту ссылку, на которую может помочь принятый ответ

Слишком много открытых файлов в Java

0 голосов
/ 19 июня 2012

Я думаю, что вы решаете эту проблему - AJP-соединение оставлено как CLOSE_WAIT

...