Eureka Server 内存,更新阈值为 0,自我保护问题 - AWS

Eureka Server memory, renew threshold is 0, self preservation issue - AWS

我部署了 2 个 Eureka 服务器实例和总共 12 个实例微服务。 .

续订(最后一分钟)如预期的那样为 24。但续订阈值始终为 0。这是打开自我保护时的状态吗? 也看到此错误- 自我保护模式已关闭。如果出现 NETWORK/OTHER 问题,这可能无法保护实例过期。 这种情况下的预期行为是什么?如果这是一个问题,如何解决?

如上所述,我部署了 2 个 Eureka Server 实例,但是在 运行 大约 19-20 小时后,Eureka Server 的一个实例总是出现故障。为什么会发生这种情况? 我使用 top 命令检查了进程 运行,发现 Eureka Server 占用了大量内存。 Eureka Server 需要配置什么才不会占用大量内存?

下面是Eureka Server的application.properties文件中的配置:

spring.application.name=eureka-server
eureka.instance.appname=eureka-server
eureka.instance.instance-id=${spring.application.name}:${spring.application.instance_id:${random.int[1,999999]}}
eureka.server.enable-self-preservation=false
eureka.datacenter=AWS
eureka.environment=STAGE

eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false

下面是我用来启动 Eureka Server 实例的命令。

#!/bin/bash
java -Xms128m -Xmx256m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -Dspring.profiles.active=stage -Dserver.port=9011 -Deureka.instance.prefer-ip-address=true -Deureka.instance.hostname=example.co.za -Deureka.client.serviceUrl.defaultZone=http://example.co.za:9012/eureka/ -jar eureka-server-1.0.jar &
java -Xms128m -Xmx256m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -Dspring.profiles.active=stage -Dserver.port=9012 -Deureka.instance.prefer-ip-address=true -Deureka.instance.hostname=example.co.za -Deureka.client.serviceUrl.defaultZone=http://example.co.za:9011/eureka/ -jar eureka-server-1.0.jar &

这种创建多个 Eureka Server 实例的方法是否正确?

部署在 AWS 上。 AWS 上的 Eureka Server 是否需要任何特定配置?

Spring 引导版本:2.3.4.RELEASE

我对所有这些都是新手,任何帮助或指导都会有很大帮助。

让我试着一一回答你的问题。

Renews (last min) 是预期的 24。但是 Renew Threshold 总是 0。这就是打开自我保护时的状态吗? 在这种情况下预期的行为是什么?如果这是一个问题,如何解决?

我可以在您的配置中看到 eureka.server.enable-self-preservation=false,如果您想在无法续订租约时立即删除已注册的应用程序,则确实需要这样做。

自我保护功能是为了防止上述情况发生,因为如果网络出现问题ps。比方说,你有两个服务 A 和 B,都注册到尤里卡,突然,B 由于暂时的网络问题无法续租。如果不存在自我保护,则 B 将从注册表中删除,尽管 B 可用,A 也无法联系到 B。 所以我们可以说Self-preservation是eureka的弹性特性。

Renews threshold是每分钟期望的renews,如果最后一分钟的实际心跳次数(Renews)小于期望的次数,Eureka server进入自我保护模式每分钟更新(更新阈值)和 当然,您可以控制续订阈值。你可以配置renewal-percent-threshold(默认是0.85)

所以在你的情况下,

应用实例总数=12

你没有eureka.instance.leaseRenewalIntervalInSeconds所以默认值30seureka.client.registerWithEureka=false

所以续订(最后一分钟)将是 24

您没有renewal-percent-threshold配置,所以默认值为0.85 每个应用程序实例每分钟的续订次数 = 2(每个 30 秒)

因此在启用自我保护的情况下,更新阈值将计算为 2 * 12 * 0.85 = 21(四舍五入)

并且在您的情况下,自我保护已关闭,因此 Eureka 不会计算续订阈值

Eureka Server 的一个实例总是宕机。为什么会发生这种情况?

我暂时无法回答这个问题,这可能是由于多种原因造成的。 你可以主要从日志中找到原因,或者如果你能post在这里记录那就太好了。

Eureka Server需要配置什么才不会占用大量内存?

根据您提供的信息,我不能说出您的内存问题,除此之外您已经指定了 -Xmx256m,到目前为止我没有遇到任何 eureka 服务器的内存问题。

但我可以说 top 不是检查 java 进程消耗的内存的正确工具。当 JVM 启动时,它会从操作系统中占用一些内存。 这是您在 ps 和 top 等工具中看到的内存量。所以最好使用 jstat 或 jvmtop

这种创建多个Eureka Server实例的方法是否正确?

两个实例的主机名 (eureka.instance.hostname) 似乎相同。如果您使用相同的主机名,复制将不起作用。 并确保您在两个实例中具有相同的应用程序名称。

部署在 AWS 上。 Eureka Server on AWS 是否需要任何特定的配置?

据我所知,除了确保实例可以相互通信外,没有什么是专门针对 AWS 的。