Akka 心跳延迟

Akka heartbeat delays

Kubernetes 上的 Akka 应用面临心跳延迟,即使没有负载也是如此。

还经常出现如下警告:

heartbeat interval is growing too large for address ...

我尝试为集群添加自定义调度程序,甚至为每个特定的参与者添加自定义调度程序,但没有帮助。我没有做任何阻塞操作,因为它只是一个简单的 Http 服务器。

当集群有负载时,节点无法访问。

我创建了一个可用于重现问题的存储库:https://github.com/CostasChaitas/Akka-Demo

首先,感谢有据可查的复制者。我确实发现了一个与您包含的依赖项有关的小故障,但很容易解决。

也就是说,我无法重现您的错误。在我的本地机器和我的开发集群上一切正常。你不包括你的负载生成器,所以也许我只是没有产生持续的负载,但我根本没有心跳延迟。

我怀疑这是 Akka Cluster heartbeat delays on Kubernetes 的副本。如果是这样,听起来您已经检查了我通常对 GC 和 CFS 的怀疑。而且,如果您能够在本地重现,那么这也不太可能是我的另一个常见问题,即 K8 网络配置不当。 (我有一个客户端在 K8 上的 Akka 集群有问题,结果证明它只是一个配置错误的集群:网络在 pods 之间丢弃和延迟数据包。)

既然你说这是负载测试,也许你只是 运行 出 sockets/files?您没有太多的 HTTP 服务器配置方式。 (也没有任何 JVM 选项。)

我认为我的下一个调试步骤是连接到 运行 包含之一并尝试测试网络中 pods 之间的网络。

我也遇到了心跳间隔增加的问题,但在我的情况下,虽然负载不高,但我开始使用集群后,我只尝试了 2tps。

通过 Akka 文档,我发现 Akka 不鼓励使用 resources.limits.cpu。我从我的部署清单文件中删除了它,它工作正常,没有延迟。

您可以在此处参考文档:https://doc.akka.io/docs/akka/current/additional/deploying.html?_ga=2.222760347.1686781468.1643119007-1504733962.1642433119#resource-limits