我遇到了一个非常奇怪的问题。几天以来,每天几次,我的 ubuntu 服务器无法建立出站连接。我能够使用 SSH 登录,连接到由 apache webserver 托管的 web 应用程序,但尝试使用 apt 安装软件包或执行 telnet google.com 443 会导致错误,例如“telnet:无法连接到远程主机:连接被拒绝”或“连接(111:连接被拒绝)无法启动与 fr.archive.ubuntu.com:80(2001:860:f70a::2)的连接。- 连接(101:网络无法访问)”。
起初,我怀疑是 iptables 规则的问题,但删除所有规则并不能解决问题。另一方面,如果我停止 tomcat9 应用服务器,一切又会恢复正常。
我无法想象 tomcat 如何影响我的服务器的网络连接。完全相同的应用程序部署在其他类似的 Ubuntu 18.04 服务器上,这些服务器不受此问题的影响。
如果您能提供任何关于如何检查以识别潜在问题的提示,我们将不胜感激。
非常感谢!
編輯>
#ping google.com
PING google.com (172.217.170.14) 56(84) bytes of data.
From _gateway (192.168.10.254) icmp_seq=1 Destination Host Unreachable
64 bytes from jnb02s02-in-f14.1e100.net (172.217.170.14): icmp_seq=1 ttl=57 time=226 ms
64 bytes from jnb02s02-in-f14.1e100.net (172.217.170.14): icmp_seq=2 ttl=57 time=226 ms
# traceroute google.com
traceroute to google.com (172.217.170.14), 30 hops max, 60 byte packets
1 _gateway (192.168.10.254) 0.889 ms !H 0.446 ms !H 0.406 ms !H
# ip route get 8.8.8.8
8.8.8.8 via 192.168.10.254 dev eth0 src 192.168.10.142 uid 0
cache
答案1
问题的一个可能根源可能是打开的文件描述符的数量超出了系统限制。
当系统处于该状态时,运行cat /proc/sys/fs/file-nr
。输出如下所示:
46512 0 9223372036854775807
如果第一个数字接近第三个数字,则意味着所有可用的文件描述符都在使用中。
要增加可用文件描述符的数量,您可以运行
sysctl -w fs.file-max=<number>
sysctl -p
其中<number>
高于您现有的最大限制(先前输出中的第三列)。
答案2
事实证明,提供基础设施的人确实设置了某种出站连接速率限制器,该限制器是由 DCM4CHEE docker 容器不断发出的反向 DNS 请求触发的。
他们一再向我保证,他们的防火墙没有启用任何此类机制,而且我也没有想到要检查出站 DNS 连接,因此我没有注意到它们执行的频率如此之高。
我花了 40 多个小时调查这个问题,在他们坦白后,我仅用 5 分钟就解决了它。
感谢您的帮助。