关于JDBC调用的Weblogic Stuck线程

问题描述:

我们经常在Weblogic服务器上获取一系列Stuck线程。我已经分析了一段时间。关于JDBC调用的Weblogic Stuck线程

我想知道的是,这个卡住的线程块是否表示它仍在从开放套接字读取数据到数据库,因为查询很简单SELECT stuff?

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) 
+0

是否将`weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.next`作为堆栈的底部? – fglez 2010-12-22 11:35:39

+0

@antispam:nope,剩下的是我们的代码通过springframework API调用它。 – JoseK 2010-12-22 12:08:36

在印刷堆栈的时候,似乎禁止来自服务器

等待更多数据
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:228) 

也许这只是查询是超过StuckThreadMaxTime和WL发出警告。

如果可能的话我会尝试:

  • 查找其查询或查询所得到的线卡,并检查执行时间
  • 使用Wireshark分析与数据库通信
  • 看一看在驱动程序源码代码(JD想到)了解堆栈跟踪

如果使用weblogic调试标志-Dweblogic.debug.DebugJDBCSQL,您将能够跟踪正在执行的SQL正在执行的盟友