Java中HttpURLConnection中的荒谬连接超时

san*_*pta 3 java connection timeout httpurlconnection

在我的一个应用程序中,我们使用HttpURLConnection打了另一台服务器 - 该应用程序运行良好数月,现在突然所有命中都面临连接超时.间歇性地,一些呼叫(500个中的1个)成功而其他所有呼叫都失败.该应用程序部署在使用Tomcat 5.5在Java 5上运行的Linux上.我从命令行尝试了一个curlwget工作正常.

使用完全相同代码库的另一个Java进程能够从命令行进行连接.我们已经重新启动了tomcat服务器以及机器,但无济于事.我们已经彻底检查了机器,并且没有阻塞过程/防火墙阻碍这一点(显然其他Java进程能够建立连接).

在间歇性突发(例如每天一次)中,应用程序能够建立一些连接,然后返回到断开状态.堆栈跟踪也不是很明显.

有什么建议可能会出错吗?

[更新]如果服务器DNS在应用程序运行时发生更改,Java将不会选择此项,并且连接将从旧IP中超时(考虑到IP已关闭).因此,在CDN的情况下,如果节点发生故障并且它被另一个IP替换,则可能发生问题.

ZZ *_*der 5

我有同样的问题,它是由HttpURLConnection处理keepalive引起的.当我们通过设置此系统属性禁用keepalive时,问题就消失了,

http.keepAlive=false
Run Code Online (Sandbox Code Playgroud)

我们有另一个与防火墙有关的问题.如果目标URL被防火墙阻止,则需要很长时间(超过2分钟).我们必须在另一个线程中运行所有HttpURLConnection,这样我们就可以在几秒钟后中断它.