永久挂起在JDBC Teradata请求上的线程

时间:2011-05-16 12:32:18

标签: java jdbc teradata

我正在使用JDBC来查询Teradata服务器。最多有100个并发请求,每个请求使用一个新连接,并在最后关闭它。经过几个小时的工作,执行请求的一些线程无限期地被卡住了。最终需要重启系统。 从检查调用堆栈开始,我看到线程处于套接字读取状态,并且当准备语句关闭连接时时发生:

案例1:

java.lang.Thread.State: RUNNABLE
               at java.net.SocketInputStream.socketRead0(Native Method)
               at java.net.SocketInputStream.read(SocketInputStream.java:129)
               at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:649)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:818)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.action(StatementReceiveState.java:125)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementController.runBody(StatementController.java:112)
               at com.teradata.jdbc.jdbc_4.statemachine.StatementController.run(StatementController.java:103)
               at com.teradata.jdbc.jdbc_4.Statement.executeStatement(Statement.java:340)
               at com.teradata.jdbc.jdbc_4.Statement.prepareRequest(Statement.java:507)
               - locked <0x00002aab4f787518> (a com.teradata.jdbc.jdbc_4.PreparedStatement)
               at com.teradata.jdbc.jdbc_4.PreparedStatement.<init>(PreparedStatement.java:66)
               at com.teradata.jdbc.jdbc_4.TDSession.createPreparedStatement(TDSession.java:723)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalPreparedStatement.<init>(TeraLocalPreparedStatement.java:89)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.prepareStatement(TeraLocalConnection.java:333)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.prepareStatement(TeraLocalConnection.java:152)
...

案例2:

java.lang.Thread.State: RUNNABLE
               at java.net.SocketInputStream.socketRead0(Native Method)
               at java.net.SocketInputStream.read(SocketInputStream.java:129)
               at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:649)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:818)
               at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:794)
               at com.teradata.jdbc.jdbc.GenericLogOffRspState.action(GenericLogOffRspState.java:66)
               at com.teradata.jdbc.jdbc.GenericLogoffController.run(GenericLogoffController.java:43)
               - locked <..> (a com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF)
               at com.teradata.jdbc.jdbc_4.TDSession.close(TDSession.java:476)
               at com.teradata.jdbc.jdbc_3.ifjdbc_4.TeraLocalConnection.close(TeraLocalConnection.java:259)
...

我正在使用JDBC Teradata驱动程序版本13.10.00.10。

知道为什么会这样吗? 这个问题对我们来说非常痛苦,我们将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

您是否尝试过升级到JDBC驱动程序的最新补丁版本? 13.10.00.18于2011-04-12发布。版本13.10.00.15包含一个修补程序,用于纠正多线程并发登录尝试抛出GSS异常的问题:MIC计算期间出错。

如果这不能解决问题并且您的客户/公司是Teradata客户,我建议您向Teradata全球支持中心开启事件。