消費者啟動,允許期間報task supervisor timed out 異常,解決


如何解決后端項目啟動時拋出 task supervisor timed out 異常

現象描述

后端項目啟動時拋出如下異常,但是該后段項目能正常啟動並注冊到注冊中心,不影響功能使用。

2018-10-10 09:39:12.407 ERROR 8916 --- [DiscoveryClient-0] c.n.d.TimedSupervisorTask : task supervisor timed out

java.util.concurrent.TimeoutException: null
at java.util.concurrent.FutureTask.get(FutureTask.java:205) ~[?:1.8.0_172]
at com.netflix.discovery.TimedSupervisorTask.run(TimedSupervisorTask.java:63) [eureka-client-1.7.2.jar:1.7.2]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_172]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_172]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_172]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_172]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_172]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_172]

原因分析

項目啟動初始化時,會啟動兩個定時任務,一個是向eureka注冊,即心跳的線程,另一個是從eureka獲取服務注冊列表,即刷新注冊列表緩存的線程,上述兩個線程都是每30s執行一次,默認超時時間都為30s,所以當30s未執行完該任務是,便會拋出Timeout的異常。發送心跳的任務比較簡單,一般不會超時。而獲取注冊列表的任務,耗時較久。

由於注冊中心是所有服務通信的基礎,所以部署在多個服務器的應用在通信時可能會比較耗時,往往會發生超時。

處理步驟

將該后段項目的 bootstrap.yml 文件中的 client.registryFetchIntervalSeconds 調大,建議調為 30。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM