【发布时间】:2010-12-22 10:23:28
【问题描述】:
我们经常在我们的 Weblogic 服务器上遇到一系列 Stuck 线程。我已经分析了一段时间。
我想了解的是,这个卡住的线程块是否表明 它仍在从打开的套接字读取数据到数据库,因为查询是简单的 SELECT 东西?
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at oracle.net.ns.Packet.receive(Packet.java:239)
at oracle.net.ns.DataPacket.receive(DataPacket.java:92)
我们已经运行了 netstat 和其他命令,从 Weblogic 应用服务器到数据库的套接字与池中的连接数相匹配。
还有什么我们应该在这里调查的想法吗?
线程转储的堆栈跟踪:
"[STUCK] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'" daemon prio=10 tid=0x61a5b000 nid=0x25f runnable [0x6147b000..0x6147eeb0]
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(Packet.java:239)
at oracle.net.ns.DataPacket.receive(DataPacket.java:92)
at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:172)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:117)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:92)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:77)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1023)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:999)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:584)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:183)
at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:1000)
at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:314)
- locked <0x774546e0> (a oracle.jdbc.driver.T4CConnection)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:228)
- locked <0x774546e0> (a oracle.jdbc.driver.T4CConnection)
at weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.next(Unknown Source)
从weblogic.work.ExecuteThread.run 到这里的位已被省略。我们有 8 组线程转储 - 每组都显示线程在同一行等待,并且同一个对象被锁定
at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:314)
- locked <0x774546e0> (a oracle.jdbc.driver.T4CConnection)
【问题讨论】:
-
weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.next是栈底吗? -
@antispam:不,剩下的就是我们通过 springframework API 调用它的代码。
-
StuckThreadMaxTime从weblogic.work.ExecuteThread.execute开始计数。也许数据库不是唯一要寻找的地方...... -
@antispam: true,但是我们有 8 组 TDs,耗时 4 分钟,线程在同一行
oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:314) - locked <0x773c1758> (a oracle.jdbc.driver.T4CConnection) -
@JoseK 你能告诉我你的问题是什么吗?
标签: jdbc weblogic connection-pooling