2009-12-21 91 views
3

使用:HornetQ 2.0.0.CR2 獨立/非羣集服務器的默認配置。HornetQ OutOfMemory啓動時使用大日誌

當我嘗試啓動一個大的期刊(> 1GB)的服務器,我得到了一個內存溢出異常:

[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郵件列表(http://www.jboss.org/hornetq/community.html)目前非常活躍,因爲他們正在爲1.0版本做準備。如果您懷疑存在問題,現在應該報告它。 – skaffman 2009-12-21 17:42:54

回答

5

事實證明,完全避免這個問題很簡單。

Paging它沒有啓用默認配置!

添加在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

here看來你的堆太小了。

The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.

您是否嘗試過修改您的JVM內存選項,特別是-Xmx(最大內存分配)?我懷疑你需要增加你的JVM最大內存,給它足夠的空間來處理你的消息。

+0

在我使用的服務器上-Xmx2048m,我仍然得到這個異常。服務器是32位,所以我不能再走了。 – 2009-12-21 17:43:52

+0

如果您禁用GCOverheadLimit檢查? – 2009-12-21 17:45:49

+0

它沒有幫助,我仍然得到「部署」JMSServerManager「出現錯誤,原因是:java.lang.OutOfMemoryError:Java堆空間」 – 2009-12-21 18:09:20

0

如果是在開發人員身上,您可以通過刪除HornetQ工作目錄(例如〜/ work/hornetq)來簡單地刪除您的隊列。