【问题标题】:OOM Exception with MTOM clientMTOM 客户端的 OOM 异常
【发布时间】:2014-08-25 10:09:30
【问题描述】:

我正在传输大尺寸文件,最后以 MTOM 实现结束。我们创建了支持 MTOM 的 Web 服务和客户端,并将客户端作为纯 Java 程序进行了测试。我们能够成功发送 1 GB 文件。这里的要点是客户端的堆甚至没有增加超过 70 MB。

但是当我尝试从 web 逻辑容器(意味着创建的 web 客户端)发起相同的调用时,我们最终会出现以下 OOM 异常。

weblogic.utils.io.UnsyncByteArrayOutputStream.resizeBuffer(UnsyncByteArrayOutputStream.java:59)
      at weblogic.utils.io.UnsyncByteArrayOutputStream.write(UnsyncByteArrayOutputStream.java:89)
      at javax.activation.DataHandler.writeTo(DataHandler.java:293)
      at com.sun.xml.ws.encoding.MtomCodec$ByteArrayBuffer.write(MtomCodec.java:196)
      at com.sun.xml.ws.encoding.MtomCodec.encode(MtomCodec.java:163)
      at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:258)
      at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:142)
      at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:86)
      at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598)
      at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557)
      at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542)
      at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439)
      at com.sun.xml.ws.client.Stub.process(Stub.java:248)
      at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135)
      at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
      at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
      at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
      at $Proxy101.uploadFile(Unknown Source)

大家有什么想法

更新:当我们在 web-logic 容器中运行程序时,MTOM 设置似乎无效!但我仍然无法找到解决方案

更新 2:似乎 weblogic 不支持流媒体!我将更新 weblogic 版本并更新票证,直到他们祝我好运..

【问题讨论】:

  • 能否分享示例代码?我正在尝试编写相同的内容,但由于未知原因,客户端将整个数据缓冲在内存中

标签: weblogic mtom


【解决方案1】:

setDomainEnv.sh 中添加这个额外的 Java/JVM 选项

EXTRA_JAVA_PROPERTIES="-DUseSunHttpHandler=true ${EXTRA_JAVA_PROPERTIES}"
export EXTRA_JAVA_PROPERTIES

从 weblogic 特定 (weblogic.net.http.HttpURLConnection) 切换到 sun 的 HTTP 处理程序。

这解决了我的问题。

参考:

Changing HttpURLConnection in running jvm

http://atgtipsandtweaks.blogspot.com/2011/11/weblogicjava-httphandler-issues.html

谢谢!

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多