解決生產上拋出TimedSupervisorTask - task supervisor timed out異常的問題


2021-05-26 14:57:20.387 logback [DiscoveryClient-2] ERROR c.n.discovery.TimedSupervisorTask - task supervisor timed out
java.util.concurrent.TimeoutException: null
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at com.netflix.discovery.TimedSupervisorTask.run(TimedSupervisorTask.java:63)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

 

收集了幾個相關的url,后期再研究

https://www.cnblogs.com/meilibao/p/11358154.html

這個看起來相關性最高,被轉載最多,復制出來

如何解決后端項目啟動時拋出 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。

 

 

 

 

https://stackoverflow.com/questions/37542939/problems-spring-cloud-config-and-spring-cloud-bus

這個提到是eureka的問題建議更換版本並給出了下面的鏈接

https://github.com/spring-cloud/spring-cloud-netflix/issues/2228

 

 

這個是相同情況的病友

https://github.com/spring-cloud/spring-cloud-netflix/issues/2812

 

不完全與此相關,但也提到

eureka-client-1.4.x版本存在此問題

https://zhuanlan.zhihu.com/p/45649061


免責聲明!

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



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