JDBC DB2驱动程序计时器线程处于BLOCKED状态

时间:2018-02-15 01:51:28

标签: java multithreading jdbc apache-commons-dbcp thread-dump

我有一个Java应用程序无限期地挂起,间歇性地挂起,直到服务器重新启动

查看线程转储,我不知道为什么其中一个TimerThread被底层 JDBC DB2 驱动程序启动并进入 BLOCKED 状态并且Tomcat Thread进入< strong>等待状态

定时器线程&#34; Timer-140423 &#34;等待锁定Tomcat Thread&#34; tomcat-http - 38 &#34;

所持有的对象

不确定为什么会发生这种情况以及如何减轻这种情况。了解解决此问题的任何方向!

我一直试图通过各种负载测试方法在较低的环境中模拟这种行为(到目前为止没有运气)。我使用的性能分析器与我在生产中出现问题时在较低环境v / s下的负载测试类似

线程转储:(已省略)

"Timer-140423" #140723 daemon prio=5 os_prio=0 tid=0x00007f2b9c208000 nid=0x19012 waiting for monitor entry [0x00007f267ffba000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at com.ibm.db2.jcc.t4.a.l(a.java:1361)
    - waiting to lock <0x0000000086226278> (a com.ibm.db2.jcc.t4.b)
    at com.ibm.db2.jcc.am.fd.a(fd.java:641)
    at com.ibm.db2.jcc.am.fd.a(fd.java:306)
    at com.ibm.db2.jcc.am.fd.a(fd.java:337)
    at com.ibm.db2.jcc.t4.wb.a(wb.java:400)
    at com.ibm.db2.jcc.t4.wb.<init>(wb.java:78)
    at com.ibm.db2.jcc.t4.a.a(a.java:323)
    at com.ibm.db2.jcc.t4.a.b(a.java:704)
    at com.ibm.db2.jcc.am.o.a(o.java:246)
    at com.ibm.db2.jcc.am.en.c(en.java:946)
    at com.ibm.db2.jcc.am.mo.run(mo.java:27)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

"tomcat-http--38" #68 daemon prio=5 os_prio=0 tid=0x00007f2c6ceb8800 nid=0x11715 in Object.wait() [0x00007f281ffd1000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at com.ibm.db2.jcc.am.o.j(o.java:266)
    - locked <0x0000000086226690> (a com.ibm.db2.jcc.t4.a)
    at com.ibm.db2.jcc.am.fn.ec(fn.java:741)
    at com.ibm.db2.jcc.am.fn.executeUpdate(fn.java:717)
    - locked <0x0000000086226278> (a com.ibm.db2.jcc.t4.b)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:877)
    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:870)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:870)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:931)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:941)
    at com.my.app.FixTheFoxDAOJdbcImpl.completedChapter(FixTheFoxDAOJdbcImpl.java:1787)

配置/环境详情:

Java             : jdk1.8.0_144
Tomcat           : tomcat-8.5.13.B.RELEASE
App Server       : Pivotal tcServer 3.2.5
Spring Version   : 4.5.3
DB Conn Pooling  : commons-dbcp-1.4.jar
Database         : DB2 Version: 11.1.0
JDBC/DB2 Driver  : db2jcc4-1.0.0.jar

另一方面,我当然可以尝试使用tomcat-dbcp或通过JNDI配置数据源,看看是否有帮助,但不确定如何测试,或者问题是否真的得到修复,以后再也不会出现(直到配置变更)

0 个答案:

没有答案