Hystrix报错排查

Posted 江湖小民

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hystrix报错排查相关的知识,希望对你有一定的参考价值。

The Hystrix timeout of 20000ms for the command uaa-service is set lower than the combination of the Ribbon read and connect timeout, 40000ms.


一、分析

Ribbon 总超时时间计算公式如下:

#当前项目的配置计算。而不是与别的模块参数计算比对。ribbonTimeout = (RibbonReadTimeout + RibbonConnectTimeout) * (MaxAutoRetries + 1) * (MaxAutoRetriesNextServer + 1)

其中,MaxAutoRetries 默认为0,MaxAutoRetriesNextServer 默认为1。

而 Hystrix 超时时间为 20000 < 40000,从逻辑上来讲,hystrixTimeout 要大于 ribbonTimeout,否则 hystrix 熔断了以后,ribbon 的重试就都没有意义了。



二、解决


配置hystrix的超时时间不小于40000,以及调低 ribbon 的 timeOut 或者重试次数。


(1)修改hystrix配置

hystrix: command: default: execution: isolation: thread:         #配置hystrix的超时时间,           #要大于(RibbonReadTimeout + RibbonConnectTimeout) * (MaxAutoRetries + 1) * (MaxAutoRetriesNextServer + 1) timeoutInMilliseconds: 40000


(2)修改ribbon配置

ribbon: ReadTimeout: 10000 ConnectTimeout: 10000# MaxAutoRetries: 1#  MaxAutoRetriesNextServer: 1


三、总结

之前有看到过很多小伙伴去修改这个Hystrix超时的这个值,导致Hystrix超时时间配置很大,这样的配置是没有意义的,达不到熔断降级的作用。

ribbon: ReadTimeout: 10000 ConnectTimeout: 10000# MaxAutoRetries: 1# MaxAutoRetriesNextServer: 1 hystrix: command: default: execution: isolation: strategy: SEMAPHORE thread: #配置hystrix的超时时间, #要大于(RibbonReadTimeout + RibbonConnectTimeout) * (MaxAutoRetries + 1) * (MaxAutoRetriesNextServer + 1) timeoutInMilliseconds: 40000


以上是关于Hystrix报错排查的主要内容,如果未能解决你的问题,请参考以下文章

一个C++工程CPU占用100%问题的排查

一个C++工程CPU占用100%问题的排查

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段

前端报错时如何排查问题

mysql数据库Too many connections报错排查

mysql数据库Too many connections报错排查