在部署docker堆栈(撰写文件)时遇到一个奇怪的问题。
我有一个三节点码头工人群-主人和两个工人。 所有机器都是具有内核3.10.0和docker 18.03.1-ce的CentOS 7.5。
大多数事情都在主服务器上运行,其中之一是Wildfly(v9.x)应用程序服务器。
一个工作人员上有一个postgres数据库。
部署堆栈后,一切正常,但过一会儿(或可能在Web应用程序中执行特定操作之后),请求开始挂起。
在wildfly容器中运行netstat -ntp
会显示52个字节卡在Send-q中:
tcp 0 52 10.0.0.72:59338 10.0.0.37:5432 ESTABLISHED -
在postgres端,连接也处于ESTABLISHED
状态,但是发送和接收队列为0。
总是正好52个字节。我在某处读到带有时间戳的ACK
数据包也是52个字节。有什么办法可以验证吗?
我们设置了以下sysctl可调参数:
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_timestamps = 0
由于View,需要前三个。
堆栈中的所有服务都连接到docker创建的同一default
网络。
现在,如果我将postgres服务移至与wildfly服务位于同一主机上,问题似乎就不会出现,或者如果我为postgres声明了一个单独的网络并将其仅添加到需要数据库的服务中(以及当然)问题似乎也没有显示出来。
有人遇到过类似的问题吗?谁能提供有关我如何进一步调试问题的指示?