1 Reply Latest reply on Aug 5, 2009 7:16 AM by marcusdidiusfalco

    UIL2.SocketManager Threads accumulate until crash

    marcusdidiusfalco

      JBoss 4.2.2 GA

      Hallo,
      I have to fix an application which heavily relies on JMS.
      It crashes after it has received a number of messages, because of a
      java.lang.OutOfMemoryError: unable to create new native thread
      A thread dump and jconsole show that

      Thread: UIL2.SocketManager.ReadTask#259 client=127.0.0.1:8093 : priority:5, demon:true, threadId:576, threadState:RUNNABLE, lockName:null
      java.net.SocketInputStream.socketRead0(Native Method)
      java.net.SocketInputStream.read(SocketInputStream.java:129)
      java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
      java.io.BufferedInputStream.read(BufferedInputStream.java:235)
      org.jboss.util.stream.NotifyingBufferedInputStream.read(NotifyingBufferedInputStream.java:79)
      java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2196)
      java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2376)
      java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2443)
      java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2515)
      java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2664)
      java.io.ObjectInputStream.readByte(ObjectInputStream.java:875)
      org.jboss.mq.il.uil2.SocketManager$ReadTask.run(SocketManager.java:340)
      java.lang.Thread.run(Thread.java:595)
      
      Thread: UIL2.SocketManager.WriteTask#260 client=127.0.0.1:8093 : priority:5, demon:true, threadId:577, threadState:TIMED_WAITING, lockName:java.lang.Object@3380c5
      java.lang.Object.wait(Native Method)
      EDU.oswego.cs.dl.util.concurrent.LinkedQueue.poll(LinkedQueue.java:170)
      org.jboss.mq.il.uil2.SocketManager$WriteTask.run(SocketManager.java:551)
      java.lang.Thread.run(Thread.java:595)


      Threads accumulate.
      If have already tried to identify all the points where JMS messages are send in the application and made sure that close() is called on sender, session and connection.
      However the threads still accumulate.
      What would be the best way to further analyse this? Is there a possibility to exactly find out which of my classes starts those threads which do not terminate?

      Thanks,

      Hans