Tomcat 7 和 Axis 2 的 Java 套接字超时异常

标签 java tomcat soap axis socket-timeout-exception

我们的 Java SOAP Web 服务有 Tomcat 7 和 Axis 2。我们还使用 C3PO 连接池(也在其他工作正常的 Web 服务中)。 Web 服务工作了大约两天,在那段时间之后它就不再工作了。然后我们的消费客户收到 Java 套接字读取超时异常。重启 Tomcat servlet 后一切正常。处理请求的持续时间约为 3 秒。 Axis 2 的默认套接字超时为 30 秒。我们的客户有 60 秒的等待超时。这个问题的奇怪之处在于它工作了一段时间,然后问题就出现了。

我不知道我可以在此处显示哪种代码来查找问题。这里socket超时的原因是什么?

最佳答案

Socket超时原因:

套接字超时可能发生在尝试连接到远程服务器时,或者在通信过程中,尤其是长期通信期间。

它们可能是由网络上的任何连接问题引起的,例如:

  1. 阻止两台机器通信的网络分区。
  2. 远程机器崩溃。这个不容易区分 来自网络分区。
  3. 更改其中一台机器的防火墙设置以防止 沟通。
  4. 设置错误,客户尝试与错误的人交谈 一台不在网络上的机器。这可能是一个错误 Hadoop 配置文件,或 DNS 表中的条目或 /etc/hosts 文件。
  5. 如果它通过长途网络(即集群外),它可能是 由于网络播放造成的暂时性故障。
  6. 如果使用对象存储的客户端,例如 Amazon S3 和 OpenStack 客户端,套接字超时可能是由于 客户端请求的远程节流:你的程序也在做 许多 PUT/DELETE 请求并被故意阻止 远端。这最有可能在创建许多小 文件,或执行批量删除(例如删除目录 许多子条目)。它也可能由瞬时故障引起 长途链路。

将此异常与 ConnectionRefused 进行比较错误,后者表示远端有一台服务器,但其上运行的程序无法接收所选端口上的入站连接。套接字超时通常意味着那里有东西,但它或网络工作不正常

识别和修复套接字超时

套接字超时的根本原因是机器之间的连接失败,所以尝试通常的过程

  1. 检查设置:这是您真正想要交谈的机器吗 到?
  2. 从引发异常的机器上,您能否解决 主机名。
  3. 解析的主机名是否正确?
  4. 你能 ping 通远程主机吗?
  5. 目标机器是否运行相关的 Hadoop 进程?
  6. 你能远程登录到目标主机和端口吗?
  7. 你能从任何其他机器远程登录到目标主机和端口吗?
  8. 在目标机器上,您可以使用 localhost 远程登录到端口吗? 主机名。如果这有效但外部网络连接时间 出,这通常是防火墙问题。
  9. 如果是远程对象存储:地址是否正确?它去吗 离开时重复操作?它只发生在批量上吗 操作?如果是后者,则可能是由于节流 远端。

资源链接:

Socket Timeout Details

关于Tomcat 7 和 Axis 2 的 Java 套接字超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018196/

相关文章:

web-services - 使用 Axis2 自定义故障代码

java - 无法通过 Olap4J API 连接到 OLAP Cube

java - Spring @Entity 类中的注释顺序

java - Tomcat 无法实例化 org.apache.log4j.varia.LevelMatchFilter 类

php - 使用 xDebug 调试 SOAP 服务

spring - 使用 tukey,当特定参数存在时从 url 中删除所有查询字符串参数

docker - 尝试在 docker 容器中运行 tomcat8/rest api 应用程序组合 - 无法映射端口

java - Docker 失败,子进程/usr/bin/dpkg 返回错误代码 (1)

java - 有人可以解释如何实验重力值吗?

java - Eclipse、Spring、Wildfly log4j 日志记录