Потоки таймера драйвера JDBC DB2 застряли в состоянии БЛОКИРОВАН

У меня есть приложение Java, висит неопределенно, с перерывами, пока сервер не будет перезапущен

Глядя на дампы потоков, я понятия не имею, почему один из объектов TimerThread раскручивается базовым драйвером JDBC DB2 и переходит в состояние BLOCKED, а поток Tomcat переходит в состояние WAITING.

Поток таймера " Timer-140423 " ожидает блокировки объекта, который удерживается потоком Tomcat " tomcat-http - 38 "

Не уверен, почему это произойдет и как это смягчить. Оцените любое направление для устранения этой проблемы!

Я пытался смоделировать это поведение в более низких средах с помощью различных методов нагрузочного тестирования (пока что не повезло). Анализатор производительности, который я использую, ведет себя аналогично моим нагрузочным тестам в более низких средах 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)

Подробности конфигурации /Env:

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 ответов

Другие вопросы по тегам