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