2016-02-17 4 views
1

Приложение OpenShit Prouction автоматически запускается ежедневно один раз из-за ошибки в куче пространства, хотя я не настроил брокер сообщений в своем приложении, я обнаружил, что activemq пытается создать новый поток, получая ошибка кучи пространства, хотя мои журналы.Openshift Wildfly 10 автоматически перезапускается из-за ошибки Out Of Memory

Должно ли мы явно отключить activemq?

[31m01:34:12,417 ERROR [org.apache.activemq.artemis.core.client] (Thread-114 (ActiveMQ-remoting-threads-ActiveMQServerImpl::serverUUID=54cb8ef9-d17a-11e5-b538-af749189a999-28800659-992791)) AMQ214017: Caught unexpected Throwable: java.lang.OutOfMemoryError: unable to create new native thread 
    at java.lang.Thread.start0(Native Method) 
    at java.lang.Thread.start(Thread.java:714) 
    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950) 
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1357) 
    at org.apache.activemq.artemis.utils.OrderedExecutorFactory$OrderedExecutor.execute(OrderedExecutorFactory.java:85) 
    at org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnection.write(InVMConnection.java:163) 
    at org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnection.write(InVMConnection.java:151) 
    at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.send(ChannelImpl.java:259) 
    at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.send(ChannelImpl.java:201) 
    at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.doConfirmAndResponse(ServerSessionPacketHandler.java:579) 
    at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.access$000(ServerSessionPacketHandler.java:116) 
    at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler$1.done(ServerSessionPacketHandler.java:561) 
    at org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl.executeOnCompletion(OperationContextImpl.java:161) 
    at org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager.afterCompleteOperations(JournalStorageManager.java:666) 
    at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.sendResponse(ServerSessionPacketHandler.java:546) 
    at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.handlePacket(ServerSessionPacketHandler.java:531) 
    at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:567) 
    at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:349) 
    at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:331) 
    at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:605) 
    at org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnection$1.run(InVMConnection.java:171) 
    at org.apache.activemq.artemis.utils.OrderedExecutorFactory$OrderedExecutor$ExecutorTask.run(OrderedExecutorFactory.java:100) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
+0

Место, где заканчивается память JVM, отнюдь не является необходимым местом для утечки памяти. Это просто, где газовый баллон высыхал. Или вы неоднократно видели это в нескольких перезагрузках? – Gimby

+0

в течение последних недельных журналов ежедневно я нахожу один раз в журнале каждый день –

+0

Я бы скорее сообщил об этом как-то, так как это может быть только симметром более серьезной проблемы, выключением и игнорированием, это не даст вам гарантия стабильности.Мне уже кажется удивительным, что Wildfly 10 там, который был выпущен только неделю назад. Я бы не назвал это производство готовым. – Gimby

ответ

0

Если вы используете это на небольшой передаче, это ваша проблема. WildFly 10 использует само по себе немного памяти. Вы должны запускать его на средней или большой передаче. Вы также можете попробовать изменить объем памяти на передаче, доступной для JVM: https://developers.openshift.com/en/wildfly-jvm-memory.html

0

Попробуйте добавить -Dactivemq.artemis.client.global.thread.pool.max.size=20.

Пул потоков по умолчанию, используемый клиентом Artemis, равен 500, а на маленьких передачах есть ограничение потока на 250 потоков. У меня была аналогичная проблема, когда я начал 8 экземпляров Wildfly на моей машине Linux, где было 4096 потоков на пользователя. На следующий день всегда существовал java.lang.OutOfMemoryError: не удалось создать новый собственный поток. Я заметил, что артемида создает постоянно новые потоки, пока не достигнет 500.

+1

Не могли бы вы дать немного больше информации о том, почему это можно сделать? Для чего это? что это мешает? –

0

Когда вы запускаете Wildfly с автономной конфигурацией full.xml, у вас включена подсистема JMS. Wildfly 10.0.0.Final имеет пул потоков Artemis по умолчанию, инициализированный 500 потоками. В будущих версиях он будет изменен с помощью настраиваемого пула потоков. С Wildfly 10.0.0.Final, простой способ сказать Артемиде инициализирует незначительное количество потоков (как Andrsej Szywala говорит) является с параметром командной строки при запуске, как это:

sh standalone.sh -c standalone-full-ha.xml -Dactivemq.artemis.client.global.thread.pool.max.size=30 

Вы можете читать далее в моем посте на JBoss форуме:

https://developer.jboss.org/thread/268397

1

Вы могли бы взглянуть на эту comment на Wildfly проекта OpenShift картридж открытых вопросов.

Подводя итог, некоторые пользователи столкнулись с проблемами памяти с параметрами по умолчанию для картриджа. Это особенно связано с тем, что картридж Openshift Wildfly позволяет по умолчанию заполнять полный профиль Java EE 7 (с настраиваемым конфигурационным файлом standalone.xml, а не с standalone-full.xml, как в автономной автономной конфигурации wildfly), которая не работает хорошо из-за их ограничений.

Но многие пользователи Java EE 7 используют только веб-профиль и не должны включать все спецификации Java EE 7 Full Profile в своем приложении.

Таким образом, позволяя использовать только функции веб-профиля Java EE 7 и отключать профили Full Profile, такие как подсистема обмена сообщениями, вы можете сделать этот картридж отлично работать на небольшой передаче.

См. Также other comment для получения более подробной информации об этом решении. table, в котором перечислены различия между профилями Java EE 7.