我有一个基于servlet的应用程序在tomcat(7.0.53),oracle jvm(1.7.x)和CentOS(6.5)上运行。
有一个脚本通过向它发出GET
请求(每10秒)来对应用程序进行一次“检查”。
我遇到以下问题:
当处于正常(中等)负载(~4k并行连接)时,某些健全性检查会因连接超时而失败(大约每10到20次请求失败)。
客户端上配置的连接超时为120秒。
这很开心仅在连接到127.0.0.1
(环回)时,连接到真实LAN界面的<IP>
(eth0
)没有此问题* 。
所以:
curl <args> http://127.0.0.1:<port>
失败,
curl <args> http://1.2.3.4:<port>
不会失败。
运行tcpdump
表示服务器端在失败的情况下不会发回SYN-ACK
。
注意:出于好奇,我禁用了IPv6支持(net.ipv6.conf.all.disable_ipv6 = 1
),问题消失了。
之前,未使用IPv6,但初始化了环回(lo
)接口的IPv6,并且应用程序已绑定到所有可用接口(127.0.0.1
,::1
和<IP>
) 。
在eth
接口上,IPv6根本没有初始化。
这种行为有什么可能的原因?
有关此问题的任何想法吗?