我们经常在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)
答案 0 :(得分:5)
在打印堆栈时,它似乎被阻止等待来自服务器的更多数据
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:228)
可能只是查询超过StuckThreadMaxTime
并且WL发出警告。
如果可能,我会尝试:
答案 1 :(得分:5)
如果您使用weblogic调试标志-Dweblogic.debug.DebugJDBCSQL,您将能够跟踪实际执行的SQL