2011-05-16 50 views
0

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

案例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。

任何想法为什么会发生? 这个问题对我们来说非常痛苦,任何帮助将不胜感激。

谢谢!

回答

2

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

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

+0

谢谢,我只是写了一段简单的代码来重现它,而且我稍后可能会打开一个事件。 – 2011-05-20 20:51:20