警告!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