java.net.SocketInputStream.socketRead0的可能原因

时间:2018-12-14 07:42:49

标签: java tomcat serversocket

我将应用程序战争托管并运行在Tomcat上,而Tomcat处于良好状态已经有几个月了。最近,tomcat配置没有任何更改,也没有任何其他与环境相关的更改,例如计算机上的java版本或war本身。此外,作为隔离环境,服务器上的负载不会突然或快速增加。 就在最近几天,从客户端到服务器的呼叫使客户端挂断,并且服务器上的跟踪显示,

 java.net.SocketInputStream.socketRead0(Native Method)
 java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
 java.net.SocketInputStream.read(SocketInputStream.java:171)
 java.net.SocketInputStream.read(SocketInputStream.java:141)
 com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1525)
 com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3274)
 com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4433)
 com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:386) 

是的,可以有一个实现Read Timeout的实现,以防止挂起,这将导致Socket Timeout Exception并阻止客户端挂起。但是问题来了,是什么导致 Socket Read无限期等待的所有原因

尝试添加“读取超时”,这会在客户端导致大量异常并导致失败。对 Socket Read不返回并无限期等待的原因有什么帮助?

1 个答案:

答案 0 :(得分:0)

读取套接字的唯一可能原因是:

  1. 远程服务器尚未写入客户端尝试读取的数据。

  2. 阻止客户端/服务器通信的网络问题。