【发布时间】:2009-08-06 12:48:40
【问题描述】:
环境: Tomcat 5.x on Java 1.5.x on Windows 使用 Oracle 9i 上的 OracleJDBC 驱动程序
问题: 我有一个处于 RUNNABLE 状态的线程。 它似乎永远不会完成。
我该如何进一步调查? 这很容易重现。
这个线程基本上是在尝试插入一些数据
更新:此插入发生在同步块中
这是我从 thread dump.. 中得到的。
"http-9080-Processor24" daemon prio=6 tid=0x0b20bc00 nid=0x1274 runnable [0x0d55e000..0x0d55fc94]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
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:1099)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1070)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:478)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10580)
- locked <0x02c10078> (a oracle.jdbc.driver.T4CPreparedStatement)
- locked <0x03dceb08> (a oracle.jdbc.driver.T4CConnection)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
【问题讨论】:
-
这个问题的标题可以更改以反映正在发生的事情。即 JDBC Oracle 调用阻塞
-
虽然我们无法确认 - 我们觉得 JVM 和数据库之间存在死锁 - 数据库或 JVM 都无法检测到 dbforums.com/oracle/…
标签: java tomcat multithreading