“java.lang.OutOfMemoryError:无法创建新的本机线程”

时间:2016-06-30 16:07:15

标签: java multithreading queue out-of-memory activemq

当我尝试使用JMSTemplate将一些消息发布到队列中时,我收到此错误。

我正在尝试使用for循环在队列中推送超过10000条消息,我收到此错误。

我的系统上有4096个线程限制。

在threadDumps中我主要看到下面的线程。

"SimpleAsyncTaskExecutor-36991" prio=10 tid=0x00007f857dc13000 nid=0x5a9 waiting on condition [0x00007f83f21e9000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x0000000748860208> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
    at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:374)
    at org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:40)
    at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:87)
    at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1394)
    at org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1925)
    at org.apache.activemq.ActiveMQMessageProducer.<init>(ActiveMQMessageProducer.java:125)
    at org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:969)
    at org.apache.activemq.jms.pool.PooledSession.getMessageProducer(PooledSession.java:395)
    at org.apache.activemq.jms.pool.PooledSession.createProducer(PooledSession.java:359)
    at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:1044)
    at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:1025)
    at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:598)
    at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:569)
    at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:491)
    at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:566)
    at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:655)
    at org.springframework.jms.core.JmsTemplate.convertAndSend(JmsTemplate.java:646)
    at com.jato.frameworks.commons.util.JATOJMSProducer.sendMessageToQueue(JATOJMSProducer.java:59)

我怀疑是为了在队列中发布消息而创建的线程的创建速度比它们被杀死的速度更快。

有什么方法可以解决这个问题吗?

0 个答案:

没有答案