数据库链接长时间无数据交互,发生线程阻塞情况

 

背景:

 在执行双机房部署的时候,因为应用长时间未访问数据库,导致后面访问的数据库的线程都被挂起。

 

现象分析:

Java代码 
  1. "Thread-74" daemon prio=10 tid=0x00007f1840044000 nid=0x387b runnable [0x00007f18bdb27000]  
  2.    java.lang.Thread.State: RUNNABLE  
  3.         at java.net.SocketInputStream.socketRead0(Native Method)  
  4.         at java.net.SocketInputStream.read(SocketInputStream.java:129)  
  5.         at oracle.net.ns.Packet.receive(Unknown Source)  
  6.         at oracle.net.ns.DataPacket.receive(Unknown Source)  
  7.         at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)  
  8.         at oracle.net.ns.NetInputStream.read(Unknown Source)  
  9.         at oracle.net.ns.NetInputStream.read(Unknown Source)  
  10.         at oracle.net.ns.NetInputStream.read(Unknown Source)  
  11.         at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1109)  
  12.         at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1080)  
  13.         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:485)  
  14.         at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:210)  
  15.         at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:804)  
  16.         at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1051)  
  17.         at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:845)  
  18.         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1156)  
  19.         at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1315)  
  20.         - locked <0x00000000be528248> (a oracle.jdbc.driver.T4CStatement)  
  21.         - locked <0x00000000c4d1b000> (a oracle.jdbc.driver.T4CConnection)  
  22.         at oracle.jdbc.driver.PhysicalConnection.doPingDatabase(PhysicalConnection.java:4614)  
  23.         at oracle.jdbc.driver.PhysicalConnection$1.run(PhysicalConnection.java:4590)  
  24.         at java.lang.Thread.run(Thread.java:662)  
  25.   
  26.    Locked ownable synchronizers:  
  27.   
  28. DubboServerHandler-172.21.55.25:20883-thread-13" daemon prio=10 tid=0x00007f1828012800 nid=0x3867 in Object.wait() [0x00007f18be305000]  
  29.    java.lang.Thread.State: TIMED_WAITING (on object monitor)  
  30.         at java.lang.Object.wait(Native Method)  
  31.         - waiting on <0x00000000be51e0b0> (a java.lang.Thread)  
  32.         at java.lang.Thread.join(Thread.java:1194)  
  33.         - locked <0x00000000be51e0b0> (a java.lang.Thread)  
  34.         at oracle.jdbc.driver.PhysicalConnection.pingDatabase(PhysicalConnection.java:4596)  
  35.         at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)  
  36.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  37.         at java.lang.reflect.Method.invoke(Method.java:597)  
  38.         at com.alibaba.druid.pool.vendor.OracleValidConnectionChecker.isValidConnection(OracleValidConnectionChecker.java:94)  
  39.         at com.alibaba.druid.pool.DruidAbstractDataSource.testConnectionInternal(DruidAbstractDataSource.java:1252)  
  40.         at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:954)  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值