2011-12-16 20 views
1

当我们进行Web服务API调用时,有时候我们没有得到响应。我们的线程只是在等待响应,不会返回错误。使用com.sun.xml.ws.request.timeout参数在Web服务请求中指定超时。但是,在这种情况下超时不起作用。WebLogic Server中的阻塞线程

环境的详细信息:

Application server: Weblogic 
Operating System: Linux 
Web services API: Metro 

有没有人有这个问题的任何想法?

堆栈跟踪:

"DefaultQuartzScheduler_Worker-88" RUNNABLE native 
java.net.SocketInputStream.socketRead0(Native Method) 
java.net.SocketInputStream.read(SocketInputStream.java:129) 
weblogic.utils.io.ChunkedInputStream.read(ChunkedInputStream.java:159) 
java.io.InputStream.read(InputStream.java:89) 
com.certicom.tls.record.ReadHandler.readFragment(Unknown Source) 
com.certicom.tls.record.ReadHandler.readRecord(Unknown Source) 
com.certicom.tls.record.ReadHandler.read(Unknown Source) 
com.certicom.io.InputSSLIOStreamWrapper.read(Unknown Source) 
java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
java.io.BufferedInputStream.read(BufferedInputStream.java:235) 
weblogic.net.http.MessageHeader.isHTTP(MessageHeader.java:220) 
weblogic.net.http.MessageHeader.parseHeader(MessageHeader.java:143) 
weblogic.net.http.HttpClient.parseHTTP(HttpClient.java:463) 
weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:357) 
weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37) 
weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:945) 
com.sun.xml.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:209) 
com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:160) 
com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:93) 
com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:116) 
com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598) 
com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557) 
com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542) 
com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439) 
com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112) 
com.sun.xml.xwss.XWSSClientPipe.process(XWSSClientPipe.java:154) 
com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115) 
com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598) 
com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557) 
com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542) 
com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439) 
com.sun.xml.ws.client.Stub.process(Stub.java:222) 
com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135) 
com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109) 
com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89) 
com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118) 
$Proxy87.getMapping(Unknown Source) 

回答

1

堆栈跟踪显示套接字的客户端和web服务之间打开。有一些阅读发生,即数据传输,但可能需要很长时间。

Weblogic上的客户端还是托管在Weblogic上的Web服务?

你能检查netstat -an | grep

它是否显示处于ESTABLISHED状态的套接字?或者像TIME_WAIT或CLOSE_WAIT这样的其他状态?

你配置了卡线程超时了多久? 默认值为600秒,所以此操作需要超过10分钟吗?

+0

客户端和webservices服务器都托管在Weblogic中。 我们将超时值设置为3000秒,但该线程停留了数天。 – Awesome 2011-12-16 17:07:09

0

尝试添加“com.sun.xml.ws.connect.timeout”。

两个属性也在不断的形式提供: com.sun.xml.ws.client.BindingProviderProperties.REQUEST_TIMEOUT com.sun.xml.ws.client.BindingProviderProperties.CONNECT_TIMEOUT

确保你不”不使用内部导入,它不适用于WebLogic。