2016-04-21 41 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隊列中的積壓或在其他隊列中備份

相關問題