我们的 Java SOAP Web 服务有 Tomcat 7 和 Axis 2。我们还使用 C3PO 连接池(也在其他工作正常的 Web 服务中)。 Web 服务工作了大约两天,在那段时间之后它就不再工作了。然后我们的消费客户收到 Java 套接字读取超时异常。重启 Tomcat servlet 后一切正常。处理请求的持续时间约为 3 秒。 Axis 2 的默认套接字超时为 30 秒。我们的客户有 60 秒的等待超时。这个问题的奇怪之处在于它工作了一段时间,然后问题就出现了。
我不知道我可以在此处显示哪种代码来查找问题。这里socket超时的原因是什么?
最佳答案
Socket超时原因:
套接字超时可能发生在尝试连接到远程服务器时,或者在通信过程中,尤其是长期通信期间。
它们可能是由网络上的任何连接问题引起的,例如:
- 阻止两台机器通信的网络分区。
- 远程机器崩溃。这个不容易区分 来自网络分区。
- 更改其中一台机器的防火墙设置以防止 沟通。
- 设置错误,客户尝试与错误的人交谈 一台不在网络上的机器。这可能是一个错误 Hadoop 配置文件,或 DNS 表中的条目或 /etc/hosts 文件。
- 如果它通过长途网络(即集群外),它可能是 由于网络播放造成的暂时性故障。
- 如果使用对象存储的客户端,例如 Amazon S3 和 OpenStack 客户端,套接字超时可能是由于 客户端请求的远程节流:你的程序也在做 许多 PUT/DELETE 请求并被故意阻止 远端。这最有可能在创建许多小 文件,或执行批量删除(例如删除目录 许多子条目)。它也可能由瞬时故障引起 长途链路。
将此异常与 ConnectionRefused 进行比较错误,后者表示远端有一台服务器,但其上运行的程序无法接收所选端口上的入站连接。套接字超时通常意味着那里有东西,但它或网络工作不正常
识别和修复套接字超时
套接字超时的根本原因是机器之间的连接失败,所以尝试通常的过程
- 检查设置:这是您真正想要交谈的机器吗 到?
- 从引发异常的机器上,您能否解决 主机名。
- 解析的主机名是否正确?
- 你能 ping 通远程主机吗?
- 目标机器是否运行相关的 Hadoop 进程?
- 你能远程登录到目标主机和端口吗?
- 你能从任何其他机器远程登录到目标主机和端口吗?
- 在目标机器上,您可以使用 localhost 远程登录到端口吗? 主机名。如果这有效但外部网络连接时间 出,这通常是防火墙问题。
- 如果是远程对象存储:地址是否正确?它去吗 离开时重复操作?它只发生在批量上吗 操作?如果是后者,则可能是由于节流 远端。
资源链接:
关于Tomcat 7 和 Axis 2 的 Java 套接字超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018196/