2010-12-22 44 views
4

我們經常在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

回答

4

在印刷堆棧的時候,似乎禁止來自服務器

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

也許這只是查詢是超過StuckThreadMaxTime和WL發出警告。

如果可能的話我會嘗試:

  • 查找其查詢或查詢所得到的線卡,並檢查執行時間
  • 使用Wireshark分析與數據庫通信
  • 看一看在驅動程序源碼代碼(JD想到)瞭解堆棧跟蹤
3

如果使用weblogic調試標誌-Dweblogic.debug.DebugJDBCSQL,您將能夠跟蹤正在執行的SQL正在執行的盟友