SpringCloud警告(Eureka):EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NO

警告!Eureka可能存在维护了错误的实例列表(当它们没有启动的时候,Eureka却把它当成启动的了);Renews值小于Threshold值,所以剩下未过时的都是安全的。html

缘由分析:安全

这个是Eureka的自我保护机制。Eureka Server在运行期间,会统计心跳失败的比例在15分钟以内是否低于85%,若是出现低于的状况(在单机调试的时候很容易知足,实际在生产环境上一般是因为网络不稳定致使),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。网络

Eureka server和client之间每隔30秒会进行一次心跳通讯,告诉server,client还活着。由此引出两个名词: 
Renews threshold:server指望在每分钟中收到的心跳次数 
Renews (last min):上一分钟内收到的心跳次数。微服务

前文说到禁止注册server本身为client,无论server是否禁止,阈值(threshold)是1。client个数为n,阈值为1+2*n(此为一个server且禁止自注册的状况) 
若是是多个server,且开启了自注册,那么就和client同样,是对于其余的server来讲就是client,是要*2的测试

我开了两个server,自注册,相关数据以下 
这里写图片描述 
阈值:1+2*1 
renews: 
1)自注册 2 + 2*1 
2)非自注册:2*1spa

Eurake有一个配置参数eureka.server.renewalPercentThreshold,定义了renews 和renews threshold的比值,默认值为0.85。当server在15分钟内,比值低于percent,即少了15%的微服务心跳,server会进入自我保护状态,Self-Preservation。在此状态下,server不会删除注册信息,这就有可能致使在调用微服务时,实际上服务并不存在。 
这种保护状态其实是考虑了client和server之间的心跳是由于网络问题,而非服务自己问题,不能简单的删除注册信息调试

stackoverflow上,有人给出的建议是: 
一、在生产上能够开自注册,部署两个server 
二、在本机器上测试的时候,能够把比值调低,好比0.49 
三、或者简单粗暴把自我保护模式关闭code

eureka.server.enableSelfPreservation=false

 参考文档server

https://www.cnblogs.com/breath-taking/articles/7940364.htmlhtm

相关文章
相关标签/搜索