首页 > 解决方案 > Tomcat SAOP Web 服务有时不可用(突发并行调用)

问题描述

我正在使用 Apache Tomcat 版本 7.0.47 并部署了一些带有公开 SOAP Web 服务的 Web 应用程序。

暴露的 WSDL 就像 http://IP:4010/guiding/rr?wsdl

我正在从客户端访问这个 WSDL,在某些情况下会有一些突发并行访问,如下所示:

192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624

192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 -
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 5934
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 -

192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624

192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 500 -
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 500 -

192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "POST /guiding/rr HTTP/1.1" 200 227
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "POST /guiding/rr HTTP/1.1" 200 227
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "POST /guiding/rr HTTP/1.1" 200 227
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "POST /guiding/rr HTTP/1.1" 200 227
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "POST /guiding/rr HTTP/1.1" 200 227
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "POST /guiding/rr HTTP/1.1" 200 227
192.168.80.73 - - [26/Jan/2021:00:17:17 +0100] "POST /guiding/rr?wsdl HTTP/1.1" 415 -
192.168.80.73 - - [26/Jan/2021:00:17:18 +0100] "POST /guiding/rr?wsdl HTTP/1.1" 500 1203
192.168.80.73 - - [26/Jan/2021:00:17:18 +0100] "POST /guiding/rr?wsdl/mex HTTP/1.1" 415 -
192.168.80.73 - - [26/Jan/2021:00:17:18 +0100] "POST /guiding/rr?wsdl/mex HTTP/1.1" 500 1207
192.168.80.73 - - [26/Jan/2021:00:17:18 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:18 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:18 +0100] "POST /guiding/rr HTTP/1.1" 200 227
192.168.80.73 - - [26/Jan/2021:00:17:20 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:20 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:20 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:20 +0100] "GET /guiding/rr?wsdl HTTP/1.1" 200 2624
192.168.80.73 - - [26/Jan/2021:00:17:20 +0100] "POST /guiding/rr HTTP/1.1" 200 227

localhost_access_log 是这样形成的:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

您可以在 localhost_access_log 中看到一些调用返回错误代码 500,而其中一些返回状态为 200,但发送的字节数 - 或太大,这导致客户端的 WSDL 信息错误。

这只发生在像这样的突发调用上。否则它整天工作得很好。

大多数这些调用只是 ping 服务器以获取 WSDL 信息。

我尝试增加分配给这个 tomcat 的 JAVA_OPTS 并增加连接器中的 connectionTimeout,例如:

xms 1024m
xmx 10240m
xx perm size 512m

<Connector executor="tomcatThreadPool"
               port="4010" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="4443"
               compression="on"
               compressableMimeType="text/html,text/xml,text/plain"/>       

我现在的问题是要检查更多内容,或者要调整哪些选项?或者也许扩展这些日志并捕获更详细的消息,但我现在确定如何。

我无法在此服务器上安装wireshark,所以这不是一个选项。

标签: tomcatsoaptomcat7

解决方案


推荐阅读