HornetQ отключил память при запуске с big journal

StackOverflow https://stackoverflow.com/questions/1941449

  •  20-09-2019
  •  | 
  •  

Вопрос

Используя:HornetQ 2.0.0.CR2 Конфигурации по умолчанию для автономного /некластеризованного сервера.

Когда я пытаюсь запустить сервер с большим журналом (> 1 ГБ), я получаю исключение OutOfMemory:

[main] 12:59:43,505 INFO [org.hornetq.integration.bootstrap.HornetQBootstrapServer]  Starting HornetQ Server
[main] 12:59:44,526 INFO [org.hornetq.core.server.impl.HornetQServerImpl]  live server is starting..
[main] 12:59:44,532 WARNING [org.hornetq.core.server.management.impl.ManagementServiceImpl]  It has been detected that the cluster admin user and password which are used to replicate management operation from one node to the other have not been changed from the installation default. Please see the HornetQ user guide for instructions on how to do this.
[main] 12:59:44,564 WARNING [org.hornetq.core.persistence.impl.journal.JournalStorageManager]  AIO wasn't located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
[main] 12:59:44,565 INFO [org.hornetq.core.persistence.impl.journal.JournalStorageManager]  Using NIO Journal
Exception in thread "hornetq-expiry-reaper-thread" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.concurrent.ConcurrentHashMap.values(ConcurrentHashMap.java:1011)
at org.hornetq.core.postoffice.impl.PostOfficeImpl$Reaper.run(PostOfficeImpl.java:1083)
at java.lang.Thread.run(Thread.java:637)
[main] 13:00:17,135 SEVERE [org.hornetq.integration.bootstrap.HornetQBootstrapServer]  Failed to start server
java.lang.IllegalStateException: Incompletely deployed:

DEPLOYMENTS IN ERROR:
  Deployment "JMSServerManager" is in error due to: java.lang.OutOfMemoryError: GC overhead limit exceeded

at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.internalValidate(AbstractKernelDeployer.java:278)
at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.validate(AbstractKernelDeployer.java:174)
at org.hornetq.integration.bootstrap.HornetQBootstrapServer.bootstrap(HornetQBootstrapServer.java:159)
at org.jboss.kernel.plugins.bootstrap.AbstractBootstrap.run(AbstractBootstrap.java:83)
at org.hornetq.integration.bootstrap.HornetQBootstrapServer.run(HornetQBootstrapServer.java:117)
at org.hornetq.integration.bootstrap.HornetQBootstrapServer.main(HornetQBootstrapServer.java:73)
Exception in thread "main" java.lang.IllegalStateException: Incompletely deployed:

DEPLOYMENTS IN ERROR:
  Deployment "JMSServerManager" is in error due to: java.lang.OutOfMemoryError: GC overhead limit exceeded

at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.internalValidate(AbstractKernelDeployer.java:278)
at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.validate(AbstractKernelDeployer.java:174)
at org.hornetq.integration.bootstrap.HornetQBootstrapServer.bootstrap(HornetQBootstrapServer.java:159)
at org.jboss.kernel.plugins.bootstrap.AbstractBootstrap.run(AbstractBootstrap.java:83)
at org.hornetq.integration.bootstrap.HornetQBootstrapServer.run(HornetQBootstrapServer.java:117)
at org.hornetq.integration.bootstrap.HornetQBootstrapServer.main(HornetQBootstrapServer.java:73)

Это может произойти в реальной жизни, когда потребитель прекращает обработку сообщений, и мне нужно перезапустить сервер.

Есть какое-нибудь обходное решение для этого?Или какие конфигурации я должен попытаться изменить?

Это было полезно?

Решение

Оказывается, было просто полностью избежать этой проблемы.

Тот самый Подкачка это не включено в конфигурации по умолчанию!

Добавление этих 2 строк в hornetq-configuration.xml должно сработать:

   <address-settings>
      <!--default for catch all-->
      <address-setting match="#">
         <dead-letter-address>jms.queue.DLQ</dead-letter-address>
         <expiry-address>jms.queue.ExpiryQueue</expiry-address>
         <redelivery-delay>0</redelivery-delay>
         <page-size-bytes>10485760</page-size-bytes>
         <message-counter-history-day-limit>10</message-counter-history-day-limit>

         <!-- Add these 2 lines -->
         <max-size-bytes>104857600</max-size-bytes>
         <address-full-policy>PAGE</address-full-policy>

      </address-setting>
   </address-settings>

Теперь возможны огромные очереди, ожидающие обработки.

Другие советы

От здесь похоже, ваша куча слишком мала.

Параллельный коллектор скинет Исключение OutOfMemoryError, если слишком много времени тратится на сборку мусора :если более 98% общего времени потрачено на сборку мусора и восстановлено менее 2% кучи, будет выдано сообщение OutOfMemoryError.Эта функция предназначена для предотвращения запуска приложений в течение длительного периода времени при незначительном прогрессе или вообще без него, поскольку куча слишком мала.При необходимости эту функцию можно отключить, добавив опцию -XX:-UseGCOverheadLimit в командную строку.

Вы пробовали изменять параметры памяти вашей JVM, и -Xmx (максимальное количество выделяемой памяти) в частности?Я подозреваю, что вам нужно увеличить максимальную память вашей JVM, чтобы предоставить ей достаточно места для обработки ваших сообщений.

Если он находится у разработчика, вы можете просто удалить свою очередь, удалив свой рабочий каталог HornetQ (например~/work/hornetq).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top