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

相關文章
相關標籤/搜索