WS服务发布在AIX上,在LR中性能测试过程中会出现几笔业务连接不上服务,异常如下:其中服务端CPU idle差不多还有20-30左右,同时有些业务响应时间达到20秒左右,服务端处理的业务逻辑比较简单。请问谁知道什么原因吗?万分感谢
javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://172.16.9.18:8991/service/SOAPServer?wsdl. It failed with:
远程主机在超时周期内没有响应。.
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:163)
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:145)
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:247)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:210)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:158)
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:93)
at javax.xml.ws.Service.<init>(Service.java:67)
Caused by:
java.net.ConnectException: 远程主机在超时周期内没有响应。
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:412)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:271)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:258)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:376)
at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
webservice、LR
------解决方案--------------------
信息量太少,只能给出点大概建议:
1、检查线程池配置,是不是太少了;
2、输出线程堆栈,看是否大量线程集中在某些等待位置;
3、用JProfiler之类的分析工具,实时监控和分析每个类执行的时间开销,找出瓶颈点。
------解决方案--------------------
是也不是。。。
创建线程需要时间的,所以中间件为了能更好的服务并发请求,会准备一个线程池,比如先圈养50个空闲线程发呆,那么如果来了50个请求,瞬间就可以完成了,而不用浪费不断创建线程的时间。如果超过50个请求同时来,则线程池可以根据配置不断增加工作线程进去。
当然,物极必反,如果来1W个请求,不能创建1W个线程吧?所以要给线程池配置最大容量。
具体去Google吧,打字也很慢的说。。。
------解决方案--------------------
对于直接发布服务的不熟悉,刚才查了下,大致说法是:
直接使用Endpoint.publish()方法发布的Web服务同一时刻只能处理一个请求(单线程)。
如果想要使用多线程机制发布服务,可使用Endpoint实例中的
void setExecutor(Executor executor)
方法设置一个线程池对象。