У меня есть своеобразная проблема, которая внезапно возникла на стороне клиента, который использует Apache Axis 1.4 для выполнения запросов SOAP к веб-службе. Все работает ровно год. Размер ответов медленно растет с течением времени, и в последнее время я получаю довольно случайные OutOfMemoryError: Java heap space
исключения при вызове. Верхняя часть трассы показана внизу. Это происходит примерно в 1/10 сделанных вызовов. Если это произойдет, и я поймаю исключение и просто повторю вызов, это сработает в 99 случаях из 100.
Когда я впервые увидел это, я, естественно, предположил, что максимальный размер кучи необходимо увеличить. Я использую Tomcat 6 и изменил предыдущую настройку -Xmx1024M
на -Xmx2048M
(на машине много оперативной памяти). Однако это ничего не изменило. Глядя на состояние Tomcat, кажется, что в куче достаточно места для размещения ответа SOAP. Проблема также не связана с доступным пространством PermGen.
Ошибка не связана со временем работы приложения, она может возникнуть сразу после запуска Tomcat. Следовательно, похоже, это не связано с общей нагрузкой на сервер.
У кого-нибудь есть идеи по этому поводу? Я имею дело с известной ошибкой в Axis? Я обнаружил несколько случаев, когда люди получали исключение OutOfMemoryError
при отправке огромных вложений по протоколу SOAP, однако это не то, чем я занимаюсь.
Я использую wrap/literal для веб-службы SOAP.
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)