【问题标题】:Spring-WS and "Error attempting to save SOAPPart"Spring-WS 和“尝试保存 SOAPPart 时出错”
【发布时间】:2011-12-27 00:55:17
【问题描述】:

我在 Weblogic 10 服务器上有一些 Web 服务。这些中的每一个都是更大系统的一部分。在本地和我们的 qa 环境中运行,系统完美无瑕,回复速度快,符合预期。一切看起来都很好。

在投入生产之前,我们将对系统进行压力测试,从而了解在回复时间变长之前我们可以承受多少负载。在测试 Web 服务(例如使用前端或 SOAPUI)时,我们遇到了一定的负载(例如,每秒有很多回复或类似的东西,我不确定究竟是什么触发了系统失败)我们得到下面列出的错误。至于为什么,我一点头绪都没有。几秒钟后系统再次回复完美,所以我猜测它与请求的数量有关......

非常感谢任何想法或提示!我在这里迷路了,所以请 - 任何事情都会有所帮助。

我们正在运行:Weblogic 10.3.2、Spring 2.5.6(由于架构原因我们无法升级)、Spring-WS 1.5.9(由于架构原因我们无法升级)和 Stripes 1.5.4

<11-11-2011 08:43:58 CET> <Error> <HTTP> <BEA-101017> <[ServletContext@11242741[app:salesoverview-ws-web module:salesoverview-ws-web path:/salesoverview-ws-web spec-version:2.5], request: weblogic.servlet.internal.ServletRequestImpl@1fbbfc5[POST /salesoverview-ws-web/services HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: "" User-Agent: Jakarta Commons-HttpClient/3.1 Content-Length: 425]] Root cause of ServletException.
org.springframework.ws.soap.saaj.SaajSoapMessageException: Could not write message to OutputStream: Error attempting to save SOAPPart. java.io.IOException: java.net.SocketException: Software caused connection abort: socket write error; nested exception is javax.xml.soap.SOAPException: Error attempting to save SOAPPart. java.io.IOException: java.net.SocketException: Software caused connection abort: socket write error
        at org.springframework.ws.soap.saaj.SaajSoapMessage.writeTo(SaajSoapMessage.java:169)
        at org.springframework.ws.transport.AbstractWebServiceConnection.send(AbstractWebServiceConnection.java:45)
        at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:97)
        at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:57)
        at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:230)
        Truncated. see log file for complete stacktrace

Caused By: javax.xml.soap.SOAPException: Error attempting to save SOAPPart. java.io.IOException: java.net.SocketException: Software caused connection abort: socket write error
        at weblogic.xml.saaj.SOAPMessageImpl.SOAPPart_writeTo(SOAPMessageImpl.java:1011)
        at weblogic.xml.saaj.SOAPMessageImpl.writeTo(SOAPMessageImpl.java:816)
        at org.springframework.ws.soap.saaj.Saaj13Implementation.writeTo(Saaj13Implementation.java:292)
        at org.springframework.ws.soap.saaj.SaajSoapMessage.writeTo(SaajSoapMessage.java:165)
        at org.springframework.ws.transport.AbstractWebServiceConnection.send(AbstractWebServiceConnection.java:45)
        Truncated. see log file for complete stacktrace
>

通过挖掘 BEA-101017,我从 Weblogic error dok 中找到了一些关于 的信息 - 尽管这对我没有帮助:

错误:[上下文] ServletException 的根本原因。

描述:[上下文] ServletException 的根本原因,Web 处理请求时捕获的应用程序容器。

原因:Web 应用程序容器捕获到意外异常。

操作:检查异常以获取确切的错误消息。

【问题讨论】:

    标签: java web-services spring-ws stress-testing


    【解决方案1】:

    假设您示例中的 Web 服务不访问其他 Web 服务(因此上述跟踪对应于您的 Web 服务发送响应): p>

    您的 Web 服务似乎正在通过 SAAJ 尝试写入断开连接(或不可用)的套接字。造成这种情况的常见原因是客户端在等待服务器回复时断开了连接。

    我建议:

    1. 检查您的客户端是否在收到响应之前等待太久,这可能导致它断开连接。

    2. 检查操作系统是否在分配套接字时出现问题。使用“netstat”或其他监控工具(如 Windows 上的 TCPView)检查打开的套接字数量(大多数操作系统对每个用户或全局允许的套接字数量施加限制)。

    3. 确保您的测试期间绝对没有网络错误(如果您在 localhost 上进行测试则不应该出现这种情况,否则您需要确保您的网络设备(路由器、交换机、其他计算机)没有掉线连接或数据包。这可能发生在流量负载高时。

    4. 确保您没有可能导致您的 Web 服务使用或关闭其他请求的套接字的线程冲突(这种情况很少见,尤其是在您使用 Spring 时)。

    5. 查看此线程 Official reasons for "Software caused connection abort: socket write error" 以及“软件导致连接中止”的其他可能原因(请注意,该问题可能特定于您的应用程序服务器和操作系统)。

    希望对您有所帮助。

    【讨论】:

    • 1.客户不会等待很长时间 - 女士的问题。 2. 我去看看。 3.这里不应该是anythnig,都在同一台服务器上运行。 4. 我正在使用 Spring,但我会看看。 5. 已经看到了,但我正在挖掘更多。
    • 如果您在与服务器相同的机器上运行负载测试工具,那么我会尝试移动它。我们始终不鼓励从您正在测试的同一台机器生成负载 - 即使它不会导致此类错误,也不会产生真实的测试数据。
    • 是的,但是在测试我们的 QA 环境时出现了问题,我们有一台专用机器进行压力测试 - 我可以在我的本地主机上重现该问题。
    【解决方案2】:

    经过大量调试后,我发现问题是由 DB2 问题引起的——我们遇到了数据库的一个角落,触发了内部堆栈溢出,然后传播到 Dao 并继续到 SOAP 部分(仅使由于 Dao 中的 Spring JDBC 模板,它更难检测)。

    长话短说,问题是一个未捕获的异常,Spring-WS 导致了“SaajSoapMessageException”。提示来自“软件导致连接中止:套接字写入错误”,但发生在 WS 端(不是客户端,也不是客户端/服务器之间的通信)。

    提示:使用 try/catch 和 catch Exception 包围您的数据库,从而能够找到引发的确切异常。在我的例子中,它抛出了一个 DB2 异常(“SQLCode -1218”),这通常在您用完资源(例如数据源连接)时使用。我的情况是 DB2 不喜欢 SQL,而且在负载下确实不喜欢。我无法解释,但它与 DB2 自己的内部资源有关 - 哎呀,想想看! :)

    感谢 jjmontes 的提示和指点,但在这种情况下不是问题。

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 2017-08-07
      • 1970-01-01
      • 2011-12-07
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多