2016-04-21 16 views
0

我们有一个运行多个应用程序的Weblogic服务器。其中一些应用程序使用配置为使用Weblogic XA事务管理器的ActiveMQ实例。由于大量ActiveMQ XATransactionId对象导致的OutOfMemoryError

现在启动后大约3分钟后,JVM触发OutOfMemoryError。堆转储显示大约85%的内存被包含org.apache.activemq.command.XATransactionId实例的LinkedList占用。该列表是一个根对象,我们不确定谁需要它。

这是什么原因造成的?

回答

3

我们在Weblogic 12c和activemq-ra上遇到了完全相同的问题。 XATransactionId对象实例不断创建,导致服务器过载。

经过2个多星期的调试,我们发现问题是由于WebLogic事务管理器试图通过调用方法recover()返回未完成的事务的id的方法来恢复一些未决的activemq事务,必须恢复。 Weblogic对这个方法的调用总是返回一个非空数字n(总是相同的)并且导致创建n个XATransactionId对象实例。

经过一番调查,我们发现Weblogic默认存储文件系统中的事务日志TLOG,并且可以将其更改为在数据库中保留。我们认为TLOGs在文件系统中存在问题,我们试图将其更改为DB并且它工作正常!现在我们的服务器运行了2周以上,没有任何重新启动,内存也很稳定,因为没有必要的XATransactionId创建一部分;)

我希望这会帮助你,让我们知道它是否适合你。

祝你好运!

+0

我不再与该项目,但我认为在某个时刻我们删除了tx日志,因为它在某种程度上是陈旧的,这在当时解决了问题。因此标记为正确。 –

0

说实话,这听起来像是你得到大量的JMS消息,或者不消耗它们,或者如果你是消费者,如果它们不处于自动确认模式,它不会确认消息。

0

检查您的JMS队列积压。可能会有高积压队列,该服务器试图读取。这些消息可能已被破坏,由于某些崩溃 最好的选择是删除JMS队列中的积压或在其他队列中备份

相关问题