Locked object found on oracle.jdbc.driver.T4CConnection

10,611

You're confusing database locks with Java locks here. JMC only shows you the locks inside your Java program (synchronized blocks, waits etc), it knows nothing about what's going on inside your DB. Your SQL-query only shows the locks on the DB level (table locks, row locks etc) and knows nothing about the locks inside your Java program. Those are absolutely different areas and absolutely different locks.

What you have here is a dump of a thread that holds a lock on the object of type T4CConnection with the address 0x7af3423c0. It only means that this thread is in the process of executing a code inside some synchronized(connection) block. That's all. The thread is not blocked by other threads (otherwise its state wouldn't be RUNNABLE, it would be WAITING or BLOCKED). It's running and reading something from a network socket (probably, the response from the DB).

Such behaviour is absolutely normal. The DB driver does synchronization on the connection instance while it's in the process of executing an SQL-query to not allow other threads to use it in parallel.

There's nothing you should worry about on this screenshot and in this thread dump.

Share:
10,611
ilovetolearn
Author by

ilovetolearn

Updated on June 19, 2022

Comments

  • ilovetolearn
    ilovetolearn almost 2 years

    I am using JMC to perform application profiling and I did not see any locked/thread contention as shown in the screenshot below.

    enter image description here enter image description here enter image description here I ran the SQL below (every few secs) also did not return any result.

    select 
       (select username from v$session where sid=a.sid) blocker,
       a.sid,
       ' is blocking ',
       (select username from v$session where sid=b.sid) blockee,
       b.sid
    from 
       v$lock a, 
       v$lock b
    where 
       a.block = 1
    and 
       b.request > 0
    and 
       a.id1 = b.id1
    and 
       a.id2 = b.id2;
    

    What could be the caused of a lock database connection? Could it be database record/table locks?

    Below is the thread dump which I have extracted during the execution of my program when it seems to be running forever.

       java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:170)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at oracle.net.ns.Packet.receive(Packet.java:283)
        at oracle.net.ns.DataPacket.receive(DataPacket.java:103)
        at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:230)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
        at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1122)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
        at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
        at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
        - locked <0x00000007af3423c0> (a oracle.jdbc.driver.T4CConnection)
    
  • Andrej Lavrinovic
    Andrej Lavrinovic over 3 years
    I have the same issue and it is absolutely not normal. Threads are randomly locked processing sql query for ever. One by one, and on the end there are no more free threads left and as result system is down. Our system can run against oracle or mssql database. Such problem occurs only with oracle jdbc driver (currently ojdbc6, but tested with ojdbc8 also and same result) and it never happens with mssql. The ReadTimeout property slightly helps, but not solves the problem.