Profile Image
Prasad

How to solve blocking thread issue?

Hi Team,

We are seeing many clocking threads in our application which causes the application unresponsive. Below is the stack trace for the same. Any possible solutions?

 

java.lang.Thread.State: RUNNABLE
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:377)
- locked <0x00000002370005e0> (a java.lang.Object)
at oracle.net.nt.TimeoutSocketChannel.read(TimeoutSocketChannel.java:174)
at oracle.net.nt.SSLSocketChannel.readFromSocket(SSLSocketChannel.java:560)
at oracle.net.nt.SSLSocketChannel.fillReadBuffer(SSLSocketChannel.java:328)
at oracle.net.nt.SSLSocketChannel.fillAndUnwrap(SSLSocketChannel.java:258)
at oracle.net.nt.SSLSocketChannel.read(SSLSocketChannel.java:109)
at oracle.net.ns.NSProtocolNIO.doSocketRead(NSProtocolNIO.java:555)
at oracle.net.ns.NIOPacket.readHeader(NIOPacket.java:258)
at oracle.net.ns.NIOPacket.readPacketFromSocketChannel(NIOPacket.java:190)
at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:132)
at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:105)
at oracle.net.ns.NIONSDataChannel.readDataFromSocketChannel(NIONSDataChannel.java:91)
at oracle.jdbc.driver.T4CMAREngineNIO.prepareForUnmarshall(T4CMAREngineNIO.java:764)
at oracle.jdbc.driver.T4CMAREngineNIO.unmarshalUB1(T4CMAREngineNIO.java:429)
at oracle.jdbc.driver.T4CTTIoac.unmarshal(T4CTTIoac.java:198)
at oracle.jdbc.driver.T4C8TTIuds.unmarshal(T4C8TTIuds.java:149)
at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:230)
at oracle.jdbc.driver.T4CTTIdcb.receive(T4CTTIdcb.java:168)
at oracle.jdbc.driver.T4C8Oall.readDCB(T4C8Oall.java:1040)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:482)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:268)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:270)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:91)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:807)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:983)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3666)
at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1426)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3713)
- locked <0x00000002370013b8> (a oracle.jdbc.driver.T4CConnection)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1167)
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:504)
at com.aveksa.server.report.DataSource.loadData(DataSource.java:156)
at com.aveksa.server.report.DataSource.next(DataSource.java:251)
at net.sf.jasperreports.engine.fill.JRFillDataset.advanceDataSource(JRFillDataset.java:1556)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1399)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1378)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1194)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:108)
- locked <0x0000000237001a10> (a net.sf.jasperreports.engine.fill.JRVerticalFiller)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:615)
at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:4

 

Thanks

Prasad


Report URL - https://fastthread.io/my-thread-report.jsp?p=c2hhcmVkLzIwMjIvMTIvOS90aHJlYWRfZHVtcDFfcHJvZF83dGhPY3QtLTgtMzAtMjA7O3RocmVhZF9kdW1wMl9wcm9kXzd0aE9jdC0tOC0zMC0yMA==

  • blocking thread

  • application unresponsive

  • FileDispatcherImp

  • timeout not set for JDBC connections

Please Sign In or to post your comment or answer

Profile Image

Ankita

Hi Prasad,

 

'default task-33204' thread is stuck on read0() method in sun.nio.ch.FileDispatcherImpl file. Before getting stuck, this thread obtained 5 locks (java.lang.Object lock, oracle.jdbc.driver.T4CConnection lock...) and never released it. Due to that 2 threads are BLOCKED as shown in the below screenshot. If threads are BLOCKED for a prolonged period, your application can become unresponsive. Stacktrace of thread you already mentioned in question. 

 

Here are few solution to resolve the problem:

 

By looking at the stacktrace , I suspect you did not set timeout for JDBC connections. If timeout settings are set, calls wouldn't be stuck for this long period. Here are few options:

 

a. There should certain timeout parameters which you can set at Oracle Connection pool level. 

 

b. You can consider passing following system properties to your JVM. More details about these properties can be found here

  • -Dsun.net.client.defaultConnectTimeout
  • -Dsun.net.client.defaultReadTimeout
  • -Doracle.jdbc.ReadTimeout

Profile Image

Prasad

Thank you Ankita for your response and suggessions. Will implement the suggested solution and let you know the results. 

Got something else on mind? Post Your Question

Not the answer you're looking for? Browse other questions tagged
  • blocking thread

  • application unresponsive

  • FileDispatcherImp

  • timeout not set for JDBC connections