2011-04-07 117 views
3

我有一個奇怪的問題,突然出現在使用Apache Axis 1.4向Web服務發出SOAP請求的客戶端。一切都順利運行了一年。隨着時間的推移,回覆的規模一直在緩慢增長,最近我在電話中獲得了相當隨機的例外。軌跡的頂部顯示在底部。這可能發生在大概1/10的通話中。如果發生了,我發現異常並再次嘗試呼叫,它可以在99個100的情況下工作。Apache Axis 1.4 OutOfMemoryError:Java堆空間

當我第一次看到這個時,我自然認爲我的最大堆大小需要增加。我正在運行Tomcat 6,並將之前的-Xmx1024M設置更改爲-Xmx2048M(機器上有大量內存)。但是,這並沒有改變任何東西。看看Tomcat的狀態,堆似乎有足夠的空間來容納SOAP響應。這個問題似乎與PermGen空間不相關。

錯誤與應用程序運行的時間無關,可能在Tomcat啓動時立即發生。因此,它似乎與服務器上的整體負載無關。

有沒有人對此有任何想法?我正在處理Axis中的一個已知錯誤嗎?我發現一些人在通過SOAP發送巨大附件時遇到了異常,但這並不是我正在做的事情。

我正在使用包裝/文字的SOAP Web服務。

Exception in thread "Thread-6" java.lang.OutOfMemoryError: Java heap space 
     at org.apache.axis.message.SAX2EventRecorder$objArrayVector.add(SAX2EventRecorder.java:254) 
     at org.apache.axis.message.SAX2EventRecorder.newElement(SAX2EventRecorder.java:136) 
     at org.apache.axis.encoding.DeserializationContext.pushNewElement(DeserializationContext.java:769) 
     at org.apache.axis.message.SOAPHandler.startElement(SOAPHandler.java:94) 
     at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:504) 
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2732) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:625) 

回答

0

從它的外觀來看,我認爲這個問題不在Axis中。你是否嘗試進行記憶分析?使用內存分析工具(MAT)等工具。

+0

你好,感謝您的意見。我使用jvisualvm來監視內存使用情況,而與Axis相關的對象實例佔內存消耗的很大一部分。但是,考慮到過去幾個月內響應的規模只有很小的一部分,並且可用堆的翻倍並不能解決問題,所以看起來實際上缺乏堆是實際問題的可能性不大。此外,是否會出現這種情況,我覺得很奇怪,它在10次中有9次是正常工作的,並且在錯誤出現後重試後立即生效。 – 2011-04-07 12:46:14

+1

還有一些輸入,我發現這個:https://issues.apache.org/jira/browse/AXIS-2749,我的情況非常相似 - 即它是一個反覆反序列化SOAP響應的線程。 – 2011-04-07 12:51:27

相關問題