2014-12-01 5 views
3

Я пытаюсь загрузить приложение размером 350 МБ через интерфейс SOAP (с включенным MTOM) и отправить вложение в веб-службы axis2.Проблема OutOfMemory при загрузке приложения 350 МБ через веб-службы axis2

Веб-службы Axis2 настроены на включение MTOM на сервере. Кэширование также включено на стороне сервера. После конфигурации есть в axis2.xml:

<parameter name="enableMTOM">true</parameter> 

и

<parameter name="cacheAttachments">true</parameter> 
<parameter name="attachmentDIR">C:\Temp\TempWS</parameter> 
<parameter name="sizeThreshold">8000</parameter> 

Tomcat Setting

Максимальный размер кучи в котом устанавливается равным 3000 МБ (см снимок экрана выше), но до сих пор веб услуги бросает меня за исключение:

Java heap space 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOfRange(Arrays.java:2694) 
    at java.lang.String.<init>(String.java:203) 
    at java.lang.StringBuffer.toString(StringBuffer.java:561) 
    at org.apache.axiom.util.base64.Base64Utils.encode(Base64Utils.java:81) 
    at org.apache.axiom.om.impl.llom.OMTextImpl.getText(OMTextImpl.java:264) 
    at org.apache.axiom.om.impl.llom.OMElementImpl.getText(OMElementImpl.java:786) 
    at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:334) 
    at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:407) 
    at org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:682) 
    at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:630) 
    at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:562) 
    at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153) 
    at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:188) 
    at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102) 
    at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) 
    at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173) 
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:173) 
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:144) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
    at com.csdcsystems.amanda.servlet.AmandaAxisServlet.service(AmandaAxisServlet.java:103) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 

Мои вопросы:

  1. Может кто-то помочь мне понять, что мне не хватает? Есть ли дополнительная настройка, которая должна быть в конфигурации tomcat?
  2. Как я могу поддерживать большие вложения для загрузки/загрузки через веб-службы axis2?

Примечание:Служба выполнена с возможностью быть с Byte [] в качестве входного/выходного параметра услуг, игровая.

+0

Где и как вы установили максимальную кучу размер? – cowls

+0

Держитесь; почему в вашей трассе есть какой-то «StringBuffer»? Вы имеете в виду, что вы генерируете строку base64 всего файла_ перед отправкой? Почему вы это вообще делаете? Можете ли вы показать свой код загрузки? – fge

+0

«Сервис настроен на то, чтобы иметь байт [] в качестве параметра ввода/вывода услуг». <- это означает, что вы ждете, чтобы проглотить все это перед отправкой? Не очень умный; почему бы не просто захватить выходной поток соединения и отправить байты при их декодировании (например, используя BaseEncoding от Guava)? – fge

ответ

0

Попробуйте увеличить пространство кучи с

C:\tomcat-7.0.57\bin>set JAVA_OPTS=-Xmx1g 
C:\tomcat-7.0.57\bin>startup.bat 

этого будет работать с 1 Гб JVM кучного пространства, если по-прежнему бросает исключение попробовать 2g.

Если вы работаете через затмение кота, перейдите в раздел «Run Configurations» выберите проект вкладки, открытые «Аргументы» и добавить -Xmx1g к «VM аргументы»

+0

Он сказал: «Максимальный размер кучи в tomcat равен 3000 МБ». Тем не менее, он не сказал, как он его настраивал, поэтому, возможно, он не установил его правильно. – cowls

 Смежные вопросы

  • Нет связанных вопросов^_^