HornetQ OutOfMemory при запуске с большим журналом - PullRequest
3 голосов
/ 21 декабря 2009

Использование: 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)

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

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

Ответы [ 3 ]

5 голосов
/ 22 декабря 2009

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

Пейджинг не включен в конфигурации по умолчанию!

Добавление этих двух строк в 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>

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

0 голосов
/ 27 ноября 2013

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

0 голосов
/ 21 декабря 2009

С здесь кажется, что ваша куча слишком мала.

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

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

...