activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Filip Hanik - Dev Lists <devli...@hanik.com>
Subject Re: java.lang.OutOfMemoryError: unable to create new native thread on AMQ 5.0
Date Mon, 19 May 2008 16:37:15 GMT
essentially, it's more of a tuning thingy then a memory leak, if one 
needs that many topics/queues, then not running with the dedicated task 
runner sounds like the solution,

Filip

Filip Hanik - Dev Lists wrote:
> so it seems there are two OOME problems
>
> either you hit java heap space error, or if you have increased your 
> -Xmx very high, you'll run into OOME caused by not enough mem for the 
> number of threads it tries to create.
>
> the two errors are directly related to each other, increasing -Xmx 
> (java heap) will effectively reduce the amount of memory for thread 
> stacks
>
> in the test case provided, that assumes it tries to create a thread 
> for each topic, in his case, 5000 threads, on 32bit windows, all I 
> have to do is set -Xmx1024m which will limit my thread count to less 
> than 5000, and you'll see the error "unable to create native thread"
>
> Filip
>
> Hiram Chirino wrote:
>> I modified your case so that it's a JUnit test and so that it starts
>> an embedded broker.. I did not see the threading problem against the
>> trunk, but I did see :
>>
>> javax.jms.JMSException: Java heap space
>>     at 
>> org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)

>>
>>     at 
>> org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1201)

>>
>>     at 
>> org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1648)
>>     at 
>> org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:227)

>>
>>     at 
>> org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:300)

>>
>>     at org.apache.activemq.App.testSend(App.java:34)
>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>     at 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
>>
>>     at 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

>>
>>     at java.lang.reflect.Method.invoke(Method.java:585)
>>     at junit.framework.TestCase.runTest(TestCase.java:154)
>>     at junit.framework.TestCase.runBare(TestCase.java:127)
>>     at junit.framework.TestResult$1.protect(TestResult.java:106)
>>     at junit.framework.TestResult.runProtected(TestResult.java:124)
>>     at junit.framework.TestResult.run(TestResult.java:109)
>>     at junit.framework.TestCase.run(TestCase.java:118)
>>     at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>     at junit.framework.TestSuite.run(TestSuite.java:203)
>>     at 
>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)

>>
>>     at 
>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
>>
>>     at 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)

>>
>>     at 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)

>>
>>     at 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)

>>
>>     at 
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

>>
>> Caused by: java.lang.OutOfMemoryError: Java heap space
>>     at 
>> org.apache.activemq.util.DataByteArrayOutputStream.<init>(DataByteArrayOutputStream.java:45)

>>
>>     at 
>> org.apache.activemq.kaha.impl.index.hash.HashIndex.load(HashIndex.java:246) 
>>
>>     at 
>> org.apache.activemq.kaha.impl.container.MapContainerImpl.load(MapContainerImpl.java:107)

>>
>>     at 
>> org.apache.activemq.store.kahadaptor.KahaPersistenceAdapter.getSubsMapContainer(KahaPersistenceAdapter.java:222)

>>
>>     at 
>> org.apache.activemq.store.kahadaptor.KahaReferenceStoreAdapter.createTopicReferenceStore(KahaReferenceStoreAdapter.java:171)

>>
>>     at 
>> org.apache.activemq.store.amq.AMQPersistenceAdapter.createTopicMessageStore(AMQPersistenceAdapter.java:456)

>>
>>     at 
>> org.apache.activemq.broker.region.DestinationFactoryImpl.createDestination(DestinationFactoryImpl.java:94)

>>
>>     at 
>> org.apache.activemq.broker.region.AbstractRegion.createDestination(AbstractRegion.java:425)

>>
>>     at 
>> org.apache.activemq.broker.jmx.ManagedTopicRegion.createDestination(ManagedTopicRegion.java:56)

>>
>>     at 
>> org.apache.activemq.broker.region.AbstractRegion.addDestination(AbstractRegion.java:120)

>>
>>     at 
>> org.apache.activemq.broker.region.RegionBroker.addDestination(RegionBroker.java:266)

>>
>>     at 
>> org.apache.activemq.broker.BrokerFilter.addDestination(BrokerFilter.java:141) 
>>
>>     at 
>> org.apache.activemq.advisory.AdvisoryBroker.addDestination(AdvisoryBroker.java:147)

>>
>>     at 
>> org.apache.activemq.broker.BrokerFilter.addDestination(BrokerFilter.java:141) 
>>
>>     at 
>> org.apache.activemq.broker.MutableBrokerFilter.addDestination(MutableBrokerFilter.java:148)

>>
>>     at 
>> org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:425) 
>>
>>     at 
>> org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:224) 
>>
>>     at 
>> org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:125)
>>     at 
>> org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:95)

>>
>>     at 
>> org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:132)

>>
>>     at 
>> org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:437)

>>
>>     at 
>> org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:624) 
>>
>>     at 
>> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:292)

>>
>>     at 
>> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:180)

>>
>>     at 
>> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:104)

>>
>>     at 
>> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)

>>
>>     at 
>> org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:205) 
>>
>>     at 
>> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) 
>>
>>     at 
>> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) 
>>
>>     at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)

>>
>>     at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675) 
>>
>>     at java.lang.Thread.run(Thread.java:613)
>>
>> If you run my modified test case do you still see the threading issue?
>>
>> Here's my new test case:
>>
>> package org.apache.activemq;
>>
>> import javax.jms.Connection;
>> import javax.jms.ConnectionFactory;
>> import javax.jms.Destination;
>> import javax.jms.JMSException;
>> import javax.jms.MessageProducer;
>> import javax.jms.Session;
>> import javax.jms.TextMessage;
>>
>> import junit.framework.TestCase;
>>
>> public class App extends TestCase {
>>
>>     Connection conn;
>>
>>     @Override
>>     protected void setUp() throws Exception {
>>         ConnectionFactory cf = new 
>> ActiveMQConnectionFactory("vm://localhost");
>>         conn = cf.createConnection();
>>     }
>>
>>     @Override
>>     protected void tearDown() throws Exception {
>>         conn.close();
>>     }
>>
>>     public void testSend() throws JMSException {
>>         Session session = conn.createSession(false, 
>> Session.AUTO_ACKNOWLEDGE);
>>         MessageProducer producer = session.createProducer(null);
>>         for (int i = 0; i < 5000; i++) {
>>             Destination destination = session.createTopic("TOPIC" + i);
>>             TextMessage message = session.createTextMessage("");
>>             producer.send(destination, message);
>>             System.out.println("Sent: " + i+": "+Thread.activeCount());
>>
>>         }
>>         producer.close();
>>     }
>> }
>>
>> On Fri, May 16, 2008 at 2:29 PM, Danilo Tuler <tuler@ideais.com.br> 
>> wrote:
>>  
>>>
>>> Hiram Chirino wrote:
>>>    
>>>> Still it would be nice if you could create a test case that shows the
>>>> problem and submit it so we can get to the root of the problem.
>>>>
>>>>       
>>> The attached code shows the problem.
>>> With UseDedicatedTaskRunner=false it works ok.
>>>
>>> http://www.nabble.com/file/p17281318/App.java App.java
>>>
>>> -- 
>>> View this message in context: 
>>> http://www.nabble.com/java.lang.OutOfMemoryError%3A-unable-to-create-new-native-thread-on-AMQ-5.0-tp17005441s2354p17281318.html

>>>
>>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>>
>>>
>>>     
>>
>>
>>
>>   
>
>
>


Mime
View raw message