Hystrix circuit short-circuited and is OPEN 異常


引起這個問題的原因是在一個滾動窗口內,失敗了二十個(默認),就會發生短路,短路時間默認為5秒,5秒之內拒絕所有的請求,之后開始運行。

解決辦法如下:

1.設置熔斷器失敗的個數,默認為20個,這里我給了1000個,只有超過1000個才會發生短路。

hystrix詳細具體的配置信息可以谷歌一下,hystrix的配置。

hystrix.command.default.circuitBreaker.requestVolumeThreshold=1000

設置完成之后,沒有出現短路的情況,但出現了

hystrix could not be queued for execution and no fallback available.

 

2.這是feign線程池的問題,因為feign默認的線程池大小為10個,而本次測試使用了100個線程

解決辦法是設置feign的核心線程池的數量。下面那個maxQueueSize可以不用設置,默認為-1,使用的是SynchronousQueue。

#hystrix.threadpool.default.maxQueueSize=1000

3.設置完成之后,又出現了time-out。

解決辦法:設置斷路器的超時

#斷路器超時設置和請求的超時

hystrix.command.default.execution.timeout.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=300000
ribbon.ConnectTimeout=300000
ribbon.ReadTimeout=300000

出現timeout的原因:

請求是100個線程去訪問,我們知道CPU的線程是上下文切換的,有些線程遲遲得不到執行權,就一直掛在那里了,一直掛,一直掛,直到滿足了斷路器的timeout,然后就被拋出異常了。

后面采用了fallback,發現會拒絕執行fallback,原因也是線程太少,設置一下回退的線程數量就好了。

#設置回退的最大線程數
hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=50


免責聲明!

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



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