2011-04-07 3 views
3

웹 서비스에 SOAP 요청을하기 위해 Apache Axis 1.4를 사용하는 클라이언트 측에 갑자기 나타난 특이한 문제가 있습니다. 모든 것이 1 년 동안 원활하게 진행되었습니다. 응답의 크기는 시간이 지남에 따라 천천히 증가하고 있으며, 최근에는 호출시 임의의 OutOfMemoryError: Java heap space 예외가 발생합니다. 트레이스의 맨 위 부분이 아래쪽에 표시됩니다. 이것은 아마도 호출의 1/10에서 발생합니다. 예외가 발생하여 다시 호출을 시도하면 100 개 중에 99 개가 작동합니다.Apache Axis 1.4 OutOfMemoryError : Java 힙 공간

처음에는이 문제를보기 시작했을 때 자연스럽게 최대 힙 크기를 늘릴 필요가 있다고 생각했습니다. Tomcat 6을 실행하고 이전 -Xmx1024M 설정을 -Xmx2048M (컴퓨터에 충분한 RAM이 있음)으로 변경했습니다. 그러나 이것은 아무 것도 바뀌지 않았습니다. Tomcat의 상태를 보면, 힙은 SOAP 응답을 수용 할 수있는 충분한 공간을 갖고있는 것처럼 보입니다. 이 문제는 PermGen 공간과 관련이없는 것 같습니다.

오류는 응용 프로그램이 실행 된 시간과 관련이 없으며 Tomcat이 시작될 때 즉시 발생할 수 있습니다. 따라서 서버의 전체로드와 관련이없는 것으로 보입니다.

아무도 이것에 대해 아이디어가 있습니까? Axis에서 알려진 버그를 다루고 있습니까? SOAP을 통해 엄청난 첨부 파일을 보낼 때 예외적 인 사람들이 발생하는 것을 발견했습니다. 그러나 이것은 제가하는 일이 아닙니다.

SOAP 웹 서비스에 wrapped/literal을 사용하고 있습니다.

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와 관련이 없다고 말할 수 있습니다. 메모리 분석을 시도 했습니까? Memory Analyzer Tool (MAT)과 같은 도구를 사용합니다.

+0

안녕하세요, 입력 해 주셔서 감사합니다. jvisualvm을 사용하여 메모리 사용을 모니터링했으며 Axis 관련 객체 인스턴스는 메모리 소비의 상당 부분을 차지합니다. 그러나 응답의 크기가 지난 몇 달 동안 작은 덩어리로만 커졌고 사용 가능한 힙을 두 배로 늘려도 문제가 해결되지 않는다면 힙이 실제로 부족하다는 것이 실제 문제는 아닌 것 같습니다. 또한이 경우, 10 개 중 9 번 작동한다는 것이 매우 이상하다는 것을 알았습니다. 오류가 발생한 후 재 시도를하면 즉시 작동합니다. –

+1

더 많은 정보를 얻었습니다. https://issues.apache.org/jira/browse/AXIS-2749와 비슷한 상황이 발생했습니다. 즉, SOAP 응답을 반복적으로 비 직렬화하는 스레드입니다. –

관련 문제