JDBCを使用してTeradataサーバーを照会しています。最大100件の同時リクエストがあり、それぞれ1つは新規接続を使用し、最後はそれを閉じます。数時間の作業の後、要求を実行しているスレッドの一部が無期限にスタックされます。最終的にシステムを再起動する必要があります。コールスタックの検査から 、私はスレッドがソケット読ん状態にあることを確認し、接続クローズ声明またはを準備する際ことは、それが起こる: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を使用しています。
なぜ起こるのか? この問題は、私たちにとって非常に苦痛であり、何か助けに感謝します。
ありがとうございます!
ありがとう、私はちょうどそれを再現するための簡単なコードを書いて、おそらく後で事件を開くでしょう。 –