背景:
在执行双机房部署的时候,因为应用长时间未访问数据库,导致后面访问的数据库的线程都被挂起。
现象分析:
- "Thread-74" daemon prio=10 tid=0x00007f1840044000 nid=0x387b runnable [0x00007f18bdb27000]
- java.lang.Thread.State: RUNNABLE
- at java.net.SocketInputStream.socketRead0(Native Method)
- at java.net.SocketInputStream.read(SocketInputStream.java:129)
- at oracle.net.ns.Packet.receive(Unknown Source)
- at oracle.net.ns.DataPacket.receive(Unknown Source)
- at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)
- at oracle.net.ns.NetInputStream.read(Unknown Source)
- at oracle.net.ns.NetInputStream.read(Unknown Source)
- at oracle.net.ns.NetInputStream.read(Unknown Source)
- at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1109)
- at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1080)
- at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:485)
- at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210)
- at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:804)
- at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1051)
- at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:845)
- at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1156)
- at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1315)
- - locked <0x00000000be528248> (a oracle.jdbc.driver.T4CStatement)
- - locked <0x00000000c4d1b000> (a oracle.jdbc.driver.T4CConnection)
- at oracle.jdbc.driver.PhysicalConnection.doPingDatabase(PhysicalConnection.java:4614)
- at oracle.jdbc.driver.PhysicalConnection$1.run(PhysicalConnection.java:4590)
- at java.lang.Thread.run(Thread.java:662)
- Locked ownable synchronizers:
- DubboServerHandler-172.21.55.25:20883-thread-13" daemon prio=10 tid=0x00007f1828012800 nid=0x3867 in Object.wait() [0x00007f18be305000]
- java.lang.Thread.State: TIMED_WAITING (on object monitor)
- at java.lang.Object.wait(Native Method)
- - waiting on <0x00000000be51e0b0> (a java.lang.Thread)
- at java.lang.Thread.join(Thread.java:1194)
- - locked <0x00000000be51e0b0> (a java.lang.Thread)
- at oracle.jdbc.driver.PhysicalConnection.pingDatabase(PhysicalConnection.java:4596)
- at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at com.alibaba.druid.pool.vendor.OracleValidConnectionChecker.isValidConnection(OracleValidConnectionChecker.java:94)
- at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1252)
- at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:954)