当前位置: 首页 > 知识库问答 >
问题:

多克服务在一段时间后停止通信

云育
2023-03-14

我有6个集装箱在码头群中运行。Kafka Zookeeper、MongoDB、A、B、C和接口。接口是来自公共的主要访问点-只有这个容器发布端口-5683。接口容器在启动期间连接到A、B和C。我使用docker组合文件docker堆栈部署,每个服务都有一个名称,用作接口的主机。一切都开始顺利,运转良好。过了一段时间(20分钟、1小时……),我无法向接口提出请求。接口接收到我的请求,但应用程序与服务A、B、C或所有服务断开连接。如果我重新启动接口,它能够重新连接到服务A、B、C。

我首先认为这是应用程序的问题,所以我在每个服务上公开了2个新端口(接口A、B、C),并用探查器和调试器连接到它们。应用程序运行正常,没有泄漏,没有阻塞的线程,正常工作并等待连接。调试器向我显示,当我向接口发出请求,接口尝试请求服务a时,会引发对等异常导致的连接重置。

在这次调试中,我发现了一些有趣的东西。当服务启动时,我将调试器附加到接口,并且调试器在一段时间后断开连接。 我无法重新连接它,直到我向容器提出请求 -

我发现的另一个有趣的事情是,我无法请求两个接口。所以我使用wireshark来查看发生了什么,然后:SYN-确认字符很好。然后应用程序发布一些数据,接口响应FIN,确认字符。我假设当接口尝试请求服务A并且它FIN连接时也会发生这种情况。接口的代码库,A、B和C对于netty服务器是相同的。

最后,我不认为这是应用程序的问题。为什么?我尝试部署容器而不是服务。我分别运行每个容器,发布每个容器的端口,并将服务的endpoint设置为localhost(而不是覆盖网络)。它正在工作。容器运行没有问题。我一开始并没有说java应用程序(接口、A、B、C)作为独立应用程序运行时没有问题——而不是在docker中。

你能帮帮我什么问题吗?为什么在覆盖网络的情况下,docker 正在关闭套接字?

我正在使用最新的泊坞窗。我也用过年纪。

共有1个答案

韦锦程
2023-03-14

最后,我能够解决这个问题。

发生了什么,再来一次。接口打开与 A,B,C 的永久 TCP 连接。当您尝试将这些服务A,B,C作为独立的Java应用程序运行时,一切都在工作。当我们对它们进行泊坞化并成群运行时,它只工作了几分钟。奇怪的是,当您从客户端到接口发出请求时,接口与另一个服务之间的连接被中断了。

在许多许多不成功的测试和调试每个容器后,我试图分别运行每个docker容器,使用映射端口和我指定的endpointlocalhost。(每个容器暴露的端口和接口都连接到localhost)有趣的事情发生了,它正在工作。当你像这样运行容器时,会使用不同的容器网络驱动程序。桥接一个。如果你在群中运行它,会使用覆盖网络驱动程序。

所以它必须是与docker网络有关的,而不是与应用程序本身有关的。下一步是在几分钟后从每个容器中tcpDum,当它应该停止工作时。这非常有趣。

  • 客户 -

在几分钟没有通信后,a正在重置打开的TCP通信。为什么?

多克使用 IP 虚拟服务器,IPVS 维护自己的连接表。IPVS 表中CLOSE_WAIT连接的默认超时为 60 秒。因此,当服务器在 60 秒后发送内容时,IPVS 连接将不再可用,并且数据包对于新的 TCP 会话看起来无效并获得 RST。在客户端,连接永远保持FIN_WAIT2状态,因为应用仍然打开了套接字。内核的fin_wait计时器仅对孤立的 TCP 套接字启动。

这是我读到的关于它和如何理解它。我不确定我对问题的解释是否正确,但是基于这些假设,我在接口和A、B、C服务之间实现了乒乓操作,以防

 类似资料:
  • 触发spring boot REST服务后,该服务可以正常运行数小时,所有请求都可以正常工作,没有任何问题。发生的是,一段时间后,它随机地停止了。在查看日志时,我没有发现任何错误,除了应用程序已被销毁的信息。 一段时间后的日志 Maven依赖项 对于为什么spring boot REST API可能会停止有什么想法吗?我的maven依赖关系是根据演示的--而且它正在成功运行--这就是为什么服务在随

  • 我们在让后台服务工作方面遇到了一些麻烦。即使在应用程序关闭和手机锁定的情况下,计时器也应该每秒执行一次代码。只要应用程序打开或在后台,手机正在使用,这就可以正常工作,但当手机被锁定并处于待机状态时,服务会在一段时间后自动停止。 代码是根据以下示例建模的:http://arteksoftware.com/backgrounding-with-xamarin-forms/ 然后,在PCL中: 最后,当

  • 问题内容: 在我的组织中,我们有许多Redis工作人员来完成我们的关键任务。通常,一天一次或两次,我们的工人会停止处理队列。 该代码基本上如下所示: 如果看到的话,就代码而言,发生的事情并不多,但是每隔一段时间,队列就会开始建立,并且工作程序不会从队列中弹出任何项目。为设置超时根本没有用,因为我们假设问题出在Redis客户端连接上。 目前,我们已经建立了一些侦听器,这些侦听器会在队列建立时提醒我们

  • 我有4个Kafka和debezium一起运行。经过几天的良好运行后,三台kafka机器脱离网络一段时间,在< code > connect distributed . out 日志文件中,我收到了许多包含以下错误的消息: 我有4台Kafka机器,经纪人从0到3 动物园管理员: <代码>192.168.240.70 关注我的 - 除了之外,有相同的 指向安装 Kafka 的计算机的相同 IP,并且

  • 更新06/04这里是消费者出厂设置。它是Spring-Kafka-1.3.1。Kafka经纪人合流版 注意:容器工厂已将自动启动设置为false。这是在加载大文件时手动启动/停止使用者。 运行大约1小时后(时间不同),使用者停止使用来自其主题的消息,即使该主题有许多可用消息。Consumer方法中有一个log语句,用于停止在日志中打印。 我们如何设计Spring-Kafka消费者,使其在停止消费的

  • 我有一个服务和一个交流的活动。当我点击按钮(我有galaxy s3,只有一个按钮)时,我的活动当然不满意,我的服务继续运行,但如果我点击后退(触摸)按钮,那么我的服务就被破坏了。我该如何改变这一点?我希望服务一直运行,直到活动破坏它。 活动: