Awesome
Awesome

Reputation: 6609

Stuck Thread In WebLogic Server

When we make a Web Services API call, sometimes we are not getting response back. Our thread is just waiting for a response and does not get an error back. Time outs are specified in the web service request using com.sun.xml.ws.request.timeout parameter. But, time outs are not working in this scenario.

Environment details:

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

Does anyone have any idea about this issue?

Stack trace:

"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)

Upvotes: 1

Views: 3334

Answers (2)

Jurri
Jurri

Reputation: 318

Try adding "com.sun.xml.ws.connect.timeout".

Both properties are also available in constant form: com.sun.xml.ws.client.BindingProviderProperties.REQUEST_TIMEOUT com.sun.xml.ws.client.BindingProviderProperties.CONNECT_TIMEOUT

Make sure you don't use internal imports, it won't work on WebLogic.

Upvotes: 0

JoseK
JoseK

Reputation: 31371

The stack trace shows the socket is opened between the client and the web service. There is some reading happening i.e. data transfer but it might be taking very long.

Is the client on Weblogic or the web service hosted on Weblogic or both?

Can you check netstat -an | grep

Does it show the sockets in ESTABLISHED state? or some other state like TIME_WAIT or CLOSE_WAIT ?

How long have you configured your stuck-thread-timeout? The default is 600 seconds, so does this operation take longer than 10 minutes?

Upvotes: 1

Related Questions