gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:47:28 28 4
gpt4 key购买 nike

我在 Tomcat 上托管并运行了我的应用程序 war,这几个月来一直处于良好状态。最近没有更改 tomcat 配置或任何其他与环境相关的更改,如机器上的 java 版本或 war 本身。此外,服务器负载不会突然或快速增加,因为它是一个孤立的环境。就在这几天,客户端调用服务端挂掉客户端,服务端trace显示,

 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. 远程服务器尚未写入客户端正在尝试读取的数据。

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

关于java - java.net.SocketInputStream.socketRead0 的可能原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53775385/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com