2011-04-07 119 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

相关问题