docker swarm - 从 wildfly 到 postgres 的连接随机挂起
docker swarm - connections from wildfly to postgres randomly hang
我在部署 docker 堆栈(撰写文件)时遇到了一个奇怪的问题。
我有一个三节点 docker swarm - master 和两个 worker。
所有机器都是 CentOS 7.5,内核 3.10.0 和 docker 18.03.1-ce.
大多数东西 运行 都在 master 上,其中之一是 wildfly (v9.x) 应用程序服务器。
其中一名工人是一个 postgres 数据库。
部署堆栈后一切正常,但一段时间后(或可能在 Web 应用程序中执行特定操作后)请求开始挂起。
运行 netstat -ntp
wildfly 容器内显示 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
需要前三个,因为 this。
堆栈中的所有服务都连接到 docker 创建的同一个 default
网络。
现在,如果我将 postgres 服务移动到与 wildfly 服务相同的主机上,问题似乎不会浮出水面,或者如果我为 postgres 声明一个单独的网络并将其仅添加到需要数据库(以及当然)问题似乎也没有表现出来。
有没有人遇到过类似的问题?谁能提供任何关于如何进一步调试问题的指示?
我在部署 docker 堆栈(撰写文件)时遇到了一个奇怪的问题。
我有一个三节点 docker swarm - master 和两个 worker。 所有机器都是 CentOS 7.5,内核 3.10.0 和 docker 18.03.1-ce.
大多数东西 运行 都在 master 上,其中之一是 wildfly (v9.x) 应用程序服务器。
其中一名工人是一个 postgres 数据库。
部署堆栈后一切正常,但一段时间后(或可能在 Web 应用程序中执行特定操作后)请求开始挂起。
运行 netstat -ntp
wildfly 容器内显示 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
需要前三个,因为 this。
堆栈中的所有服务都连接到 docker 创建的同一个 default
网络。
现在,如果我将 postgres 服务移动到与 wildfly 服务相同的主机上,问题似乎不会浮出水面,或者如果我为 postgres 声明一个单独的网络并将其仅添加到需要数据库(以及当然)问题似乎也没有表现出来。
有没有人遇到过类似的问题?谁能提供任何关于如何进一步调试问题的指示?