我正在运行JVM,该JVM通过JDBC驱动程序连接到Teradata,并进行多个查询产生很小的结果。尝试读取套接字时,该进程偶尔会永久卡住。每2-3个查询就会发生一次,此后该过程将卡住。这是发生堆栈跟踪后的示例:
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.read(TDNetworkIOIF.java:747)
at com.teradata.jdbc.jdbc_4.io.TDPacketStream.readStream(TDPacketStream.java:800)
at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.action(StatementReceiveState.java:141)
at com.teradata.jdbc.jdbc_4.statemachine.StatementController.runBody(StatementController.java:137)
at com.teradata.jdbc.jdbc_4.statemachine.StatementController.run(StatementController.java:128)
at com.teradata.jdbc.jdbc_4.TDStatement.closeRequest(TDStatement.java:551)
- locked <0x000000076fc747a8> (a com.teradata.jdbc.jdk6.JDK6_SQL_Statement)
at com.teradata.jdbc.jdbc_4.TDStatement.internalClose(TDStatement.java:508)
- locked <0x000000076fc747a8> (a com.teradata.jdbc.jdk6.JDK6_SQL_Statement)
at com.teradata.jdbc.jdbc_4.TDStatement.close(TDStatement.java:452)
- locked <0x000000076fc747a8> (a com.teradata.jdbc.jdk6.JDK6_SQL_Statement)
当我从MacOS笔记本电脑运行它时,相同的代码也可以正常工作。这让我认为这是客户端问题,或者是网络问题,而不是服务器问题。 我尝试进行TCP转储,但没有发现任何引起我注意的可疑内容。 我了解,似乎没有足够的信息来获得明确的答案。我的问题是,为了调查这个问题,我应该首先探索什么? 这是一些环境细节。
OS: Ubuntu 16.04.4 LTS xenial JVM: Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) JDBC: Teradata JDBC Driver 16.20.00.08
我将不胜感激。