Apache Axis 1.4 OutOfMemoryError: Java heap space

3
我有一个奇特的问题,它突然出现在客户端上,该客户端使用Apache Axis 1.4向Web服务发起SOAP请求。一切都一直运行得很顺利,已经有一年了。响应大小随着时间的推移而逐渐增长,最近,我会在调用过程中随机地遇到OutOfMemoryError: Java heap space异常。跟踪的前面部分显示在底部。这可能发生在十分之一的呼叫中。如果发生了并且我捕捉到了异常,只要再尝试一次呼叫,99次中就能成功一次。
当我第一次看到这个问题时,自然会认为我的最大堆大小需要增加。我正在运行Tomcat 6,并将以前的-Xmx1024M设置更改为-Xmx2048M(机器上有足够的RAM)。然而,这并没有改变任何东西。查看Tomcat的状态,堆似乎有足够的空间来容纳SOAP响应。问题似乎也与PermGen空间无关。
错误与应用程序运行的时间无关,它可以立即在Tomcat启动时发生。因此,它似乎与服务器的总体负载无关。
有人对此有什么想法吗?我是否正在处理Axis中已知的错误?我发现一些人在通过SOAP发送巨大附件时会出现OutOfMemoryError异常,但这不是我的情况。
我正在使用包装/字面值的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)
1个回答

0
从外观上看,我会说问题不在于Axis。你尝试过执行内存分析吗?使用Memory Analyzer Tool(MAT)这样的工具。

你好,感谢提供这些信息。我已经使用jvisualvm监控了内存使用情况,与Axis相关的对象实例占用了大量内存。然而,考虑到响应大小在过去几个月中只增长了一点点,并且可用堆的翻倍并不能解决问题,似乎实际上缺少堆并不是真正的问题。此外,如果确实如此,我发现它能够在10次尝试中9次成功,错误发生后立即重试也可以使它正常工作,这让我感到非常奇怪。 - Marcus Johansson
1
我找到了更多的信息,看到这个链接:https://issues.apache.org/jira/browse/AXIS-2749 我的情况非常相似——即一个线程反复反序列化SOAP响应。 - Marcus Johansson
@MarcusJohansson,你找到这个问题的解决方案了吗?我正在处理一个遗留应用程序,我们仍在使用axis 1.4。 - prasadg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接