需要Activemq MemoryUsage优化 - 我的队列溢出

时间:2015-07-20 09:02:58

标签: activemq

我们有基于java的消息处理系统,其中有近25个不同的队列和一个主题。我们将此系统设置为最大内存使用量为2GB,并在正常情况下每秒处理40条消息。这个系统工作正常几天,然后开始飙升内存,然后达到极限。

   

在我们的分析中,我们发现MemoryUsage保存了这个原因的关键,下面是一个泄漏可疑堆栈跟踪,其中一个队列的堆转储使用了近50%的内存。更高容量的消息可能会大量加载队列。为此系统设置MemoryUsage的最佳配置是什么?

519,955,448 (62.85%) [72] 8 org/apache/activemq/usage/MemoryUsage 0x80d8d180
519,843,456 (62.84%) [16] 2 java/util/concurrent/CopyOnWriteArrayList 0x80d8d210
519,843,392 (62.84%) [352] 89 array of java/lang/Object 0x822cd2e0
411,721,616 (49.77%) [72] 9 org/apache/activemq/usage/MemoryUsage 0x83833378
411,721,248 (49.77%) [16] 2 java/util/concurrent/CopyOnWriteArrayList 0x83835898
411,721,184 (49.77%) [8] 2 array of java/lang/Object 0x8383a730
411,718,600 (49.77%) [336] 33 org/apache/activemq/broker/region/Queue 0x83833120
411,693,720 (49.77%) [16] 2 org/apache/activemq/store/kahadb/KahaDBTransactionStore$1 0x838353e0
411,693,256 (49.77%) [24] 3 org/apache/activemq/store/kahadb/KahaDBTransactionStore 0x80d76aa0
411,689,856 (49.76%) [280] 37 org/apache/activemq/store/kahadb/KahaDBStore 0x80d74de0
358,088,168 (43.29%) [104] 14 org/apache/kahadb/journal/Journal 0x80d76790
356,119,216 (43.05%) [48] 1 java/util/concurrent/ConcurrentHashMap 0x80d773c0
356,119,168 (43.05%) [64] 16 array of java/util/concurrent/ConcurrentHashMap$Segment 0x80d8e628

1 个答案:

答案 0 :(得分:0)

很难用这些有限的信息推测过多。如果你的消费者落后,记忆将开始填补,你真的无能为力。我估计,每秒40 msgs,它会快速运行。

您可以做的是在内存限制后将队列溢出到磁盘。这会减慢速度,但至少会在峰值期间运行。

该地区本身通常很复杂,据我所知,没有银弹。

继续阅读cursors etcmemory usage and producer flow control