2009-01-27 88 views
2

我在JBoss中有一個非常奇怪的行爲,我想利用自己的SO人羣的集體智慧。JBoss中的內存泄漏

我們使用JBoss(4.0.4我認爲)來提供SOAP調用。事實上,它不再用作榮耀的RPC服務器。當我們有20多個客戶端同時發送請求時,我們的內存不足。請求由傳入的相當小的請求(適當的SOAP)和返回的結果數據包組成,這些數據包本質上是一個長的SOAP字符串(並且該字符串的內容是XML)。是的,我意識到這是不理想的。不要問。

我已經將泄漏追蹤到一個org.jboss.axis.message.SAX2EventRecorder實例,它包含了4百萬個對象(字符串和整數)。現在,即使是最長的響應也沒有攜帶4MB的數據。請求都小於40K。有些東西很腥,但我在網上找不到任何文檔。

有人能告訴我錄音機用於什麼嗎?我該如何擺脫它?或者可能將其配置爲較少內存飢餓?任何幫助表示讚賞。


更新:澄清 - 我做了內存轉儲,轉儲顯示一個數組或4,000,000+對象,字符串和整數。

[email protected](141個字節)::字段記錄 org.jboss所述陣列由org.jboss.axis.message.SAX2EventRecorder其又由這些人持有資.axis.message.RPCParamElementImpl @ 0x19c32260(123字節):現場記錄器 [email protected](121字節):現場記錄器 [email protected](124字節) :字段記錄 [email protected](67個字節):字段記錄 [email protected]98(24個字節):這個字段0 $

我們自己的應用程序的數據結構是臃腫的,但沒有達到這個程度。

另一個更新:找到了「解決問題的能力」的能力:我們正在切換到64位內存。歡呼。

+1

@Arkadiy:不要以爲JBoss有bug;假設該錯誤在您的代碼中。您已經確定了軟件的一個「次優」條件。爲什麼不能有更多? – 2009-01-27 13:42:02

+0

我的問題是:你在做什麼運行如此舊版本的JBoss?它已經有2.5歲了。你經常會發現人們對於過時的軟件有些猶豫,甚至不願意幫助。 – cletus 2009-01-27 13:42:07

回答

11

使用JVM arg -XX運行:-HeapDumpOnOutOfMemoryError。這會在內存不足時給你堆轉儲。然後,您可以使用jhat工具(它隨您的JDK提供)來分析堆轉儲。或者,您可以使用jconsole工具(隨JDK提供)隨時使用內存管理MBean請求堆轉儲。

它會告訴你這400萬個對象實際上包含哪些內容,這可能會讓你瞭解軟件不釋放內存的原因。

編輯:

看來你不是唯一一個這個問題。有與軸

AXIS-2698

AXIS-2749

2日提交的bug報告中看到的也AXIS-1771,它有關於反序列化和途徑介導其影響的一些有趣的信息。你正在使用哪個版本的Axis?

0

如果可以,請在Java 6下運行應用程序。最新版本包括VisualVM用於分析。它應該能夠顯示內存的增長。您可以附加到Java 5 VM,但不會顯示太多。