8 Replies Latest reply on May 5, 2004 12:43 PM by Raja

    Interrupted while requesting permit!

    Stephane Nicoll Master

      Our environment is Jboss 3.2.3 on linux redhat9, DB is postgresql 7.3.4 and we use it as JBossMQ persistence manager.

      We have a session bean that call a method with RequiresNew. This method does the following:

      - Read a message in a queue
      - Do some processing with the message (calling an MBean that will write some file to disk).

      Sometimes (but it's reproductible, we got the following stacktrace:

      17:31:52,303 WARN [jboss.tm.TransactionImpl] Transaction TransactionImpl:XidImpl [FormatId=257, GlobalId=biohazard.dev.XXXXX.com//45, BranchQual=] timed out. status=STATUS_ACTIVE
      17:31:52,376 ERROR [adapter.jms.JmsSessionFactoryImpl] could not create session
      javax.resource.ResourceException: Interrupted while requesting permit! Waited 1 ms, invocation time: 1081438312365
      at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:259)
      at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:496)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:425)
      at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:318)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:477)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:814)
      at org.jboss.resource.adapter.jms.JmsSessionFactoryImpl.createQueueSession(JmsSessionFactoryImpl.java:119)
      at com.XXXXX.XXXXXX.core.common.JmsReceiverBean.receive(JmsReceiverBean.java:78)
      at com.XXXXX.XXXXXX.core.common.JmsReceiverBean.receive(JmsReceiverBean.java:126)

      In our code line 78 is:

      session = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

      queueConnection is a transient attribute of our session bean. We open the connection when the bean is created/activated and we close it when the bean is passivated/removed.

      I took thread dump and everything is normal

      Could it be a Jboss bug?

      Regards,

      Stephane

        • 1. Re: Interrupted while requesting permit!
          Stephane Nicoll Master

          I forgot to mention that we use java:/JmsXA as connection factory.

          Regards,

          Stephane

          • 2. Re: Interrupted while requesting permit!
            Elias Ross Master

            I've been seeing this, having done some recent performance testing on JBoss 3.2.3. I suspect this is a JBoss bug. This happens after about 50,000 message processed by a MDB which is using the java:/JmsXA connection factory (transacted.)

            I'm not sure why the connection pool would block; why wouldn't it be unlimited in size?

            2004-04-07 19:09:35,177 ERROR [JmsSessionFactoryImpl] (Thread Pool Worker-165)
            could not create session
            javax.resource.ResourceException: Interrupted while requesting permit! Waited 5
            ms, invocation time: 1081364975159
             at
            org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:259)
             at
            org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:496)
             at
            org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:425)
             at
            org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:318)
             at
            org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:477)
             at
            org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:814)
            
             at
            org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:477)
             at
            org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:814)
             at
            org.jboss.resource.adapter.jms.JmsSessionFactoryImpl.createQueueSession(JmsSessionFactoryImpl.java:119)


            • 3. Re: Interrupted while requesting permit!
              Adrian Brock Master

              The default pool size is 20
              There is an *implicit*

              <max-pool-size>20</max-pool-size>
              

              in jms-ds.xml

              The interrupt is a transaction timeout.

              Allocating a connection for the lifetime of the bean is not a very good use of resources.
              The things are pooled for gods sake, just open and close them as you need them,
              they don't get really closed.

              Regards,
              Adrian

              • 4. Re: Interrupted while requesting permit!
                Stephane Nicoll Master

                Hey Adrian,

                So you suggest to open/close the connection every time I need access to the queue. Well ok but could it be the cause of my problem?

                I don't get you with this pool size settings. My scenario is:

                RequresNew - New transaction is created
                - Create session
                - Create receiver
                - Read message
                - Do some stuff with it
                - Close receiver
                - Close session

                With a pool of 1 it should work right?

                Regards,

                Stephane

                • 5. Re: Interrupted while requesting permit!
                  Stephane Nicoll Master

                  Also what are the benefit (and drawbacks) of changing the max-pool-size setting.

                  Regards,

                  Stephane

                  • 6. Re: Interrupted while requesting permit!
                    Adrian Brock Master

                    Controlling the number of concurrent requests.
                    It uses strict pooling. This should be combined with the

                    <attribute name="blocking-timeout-millis>5000</attribute>
                    

                    to control how long threads waits if there are no connections available.


                    • 7. Re: Interrupted while requesting permit!
                      pward Newbie

                      I'm seeing this issue at a client with 3.2.3. I've tried changing the max-pool-size to 5000 with no effect.

                      It looks like (based on jboss-ds_1_0.dtd) that the blocking timeout value should be specified in [jboss_home]\server\default\[config]\deploy\jms\jms-ds.xml as

                      <connection-factories>
                      
                       ... stuff ...
                      
                       <tx-connection-factory>
                      
                       ... stuff ...
                      
                       <max-pool-size>5000</max-pool-size>
                      
                       <blocking-timeout-millis>5000</blocking-timeout-millis>
                      
                       </tx-connection-factory>
                      
                      </connection-factories>
                      


                      Can you confirm this?

                      Thanks in advance,
                      Paul

                      • 8. Re: Interrupted while requesting permit!
                        Raja Master

                        Paul, Yes that should work. This is based on the concurrent.jar that gets a permit waiting for the timeout second u provide in the -ds.xml