Hi All, I've just got hit by an OutOfMemoryError: unable to create new native thread issue. I've switched UseDedicatedTaskRunner to false which appears to have resolved the issue for now but I have a feeling I'm just masking a deeper problem.
I have the following set up: 2 ActiveMQ brokers configured as a network of brokers Several applications that use - a Spring JmsTemplate with a PooledConnectionFactory - a Spring DefaultMessageListenerContainer that uses a regular ConnectionFactory. The DefaultMessageListenerContainers are set to CACHE_CONSUMER - a static failover broker URL for both the JmsTemplate and listener container to the two brokers In the applications themselves, I'm getting this: java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:574) at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:455) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:863) at org.apache.activemq.thread.PooledTaskRunner.wakeup(PooledTaskRunner.java:76) at org.apache.activemq.transport.failover.FailoverTransport.reconnect(FailoverTransport.java:536) at org.apache.activemq.transport.failover.FailoverTransport.start(FailoverTransport.java:239) at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:57) at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:57) at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:260) at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:224) at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:172) at org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:125) at org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:110) at org.apache.activemq.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:81) at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:461) at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:539) In the brokers I'm getting this: INFO | jvm 1 | 2009/09/30 12:28:41 | Exception in thread "ActiveMQ Transport Server Thread Hand ler: tcp://localhost:41414" java.lang.OutOfMemoryError: unable to create new native thread INFO | jvm 1 | 2009/09/30 12:28:41 | at java.lang.Thread.start0(Native Method) INFO | jvm 1 | 2009/09/30 12:28:41 | at java.lang.Thread.start(Thread.java:574) INFO | jvm 1 | 2009/09/30 12:28:41 | at org.apache.activemq.broker.TransportConnector$1.onAccept(TransportConnector.java:221) INFO | jvm 1 | 2009/09/30 12:28:41 | at org.apache.activemq.transport.tcp.TcpTransportServer.handleSocket(TcpTransportServer.java:409) INFO | jvm 1 | 2009/09/30 12:28:41 | at org.apache.activemq.transport.tcp.TcpTransportServer$1.run(TcpTransportServer.java:341) INFO | jvm 1 | 2009/09/30 12:28:41 | at java.lang.Thread.run(Thread.java:595) INFO | jvm 1 | 2009/09/30 12:59:27 | Exception in thread "DefaultMessageListenerContainer-80896" java.lang.OutOfMemoryError: unable to create new native thread INFO | jvm 1 | 2009/09/30 12:59:27 | at java.lang.Thread.start0(Native Method) INFO | jvm 1 | 2009/09/30 12:59:27 | at java.lang.Thread.start(Thread.java:574) INFO | jvm 1 | 2009/09/30 12:59:27 | at org.springframework.core.task.SimpleAsyncTaskExecutor.doExecute(SimpleAsyncTaskExecutor.java:157) INFO | jvm 1 | 2009/09/30 12:59:27 | at org.springframework.core.task.SimpleAsyncTaskExecutor.execute(SimpleAsyncTaskExecutor.java:145) INFO | jvm 1 | 2009/09/30 12:59:27 | at org.springframework.core.task.SimpleAsyncTaskExecutor.execute(SimpleAsyncTaskExecutor.java:126) INFO | jvm 1 | 2009/09/30 12:59:27 | at org.springframework.jms.listener.DefaultMessageListenerContainer.doRescheduleTask(DefaultMessageListenerContainer.java:598) INFO | jvm 1 | 2009/09/30 12:59:27 | at org.springframework.jms.listener.AbstractJmsListeningContainer.rescheduleTaskIfNecessary(AbstractJmsListeningContainer.java:509) INFO | jvm 1 | 2009/09/30 12:59:27 | at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:918) I'm also getting a lot of these in the logs: FailoverTransport.doReconnect | Successfully connected to tcp://xxxxxxxx:xxxx Other information: We've got a similar set up in our load testing environment and our other production environment and neither of them appear to have the same problem (yet?). I've read the JmsTemplate gotchas and outofmemory pages on the ActiveMQ site. I think I'm within the guidelines... We're using Spring 2.5.6 We aren't using a transaction manager any ideas?