Hystrix circuit short-circuited and is OPEN 异常

2023-11-03 01:59

本文主要是介绍Hystrix circuit short-circuited and is OPEN 异常,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自 https://www.jianshu.com/p/f7fb59f43485

 

昨天开了一百个线程采用feign去请求第三方项目,结果报错,出现了短路,大概是下面这样的。(feign整合了hystrix并且自动打开了熔断器)

Hystrix circuit short-circuited and is OPEN

。。。。。

百度了一下,几乎没人碰到这个问题,于是去谷歌了,发现还真有人碰到这个问题。引起这个问题的原因是在一个滚动窗口内,失败了二十个(默认),就会发生短路,短路时间默认为5秒,5秒之内拒绝所有的请求,之后开始运行。然后解决办法如下:

设置熔断器失败的个数,默认为20个,这里我给了1000个,只有超过1000个才会发生短路。hystrix详细具体的配置信息可以谷歌一下,hystrix的配置。

hystrix.command.default.circuitBreaker.requestVolumeThreshold=1000

没错,当我设置完成之后,没有出现短路的情况,但是出现了

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

exo me? 不能队列执行?又去谷歌了一下,发现是feign线程池的问题,因为feign默认的线程池大小为10个,我却用了一百个线程,下面是github大佬的回答。

 

去官方文档看了下,解决办法是设置feign的核心线程池的数量。下面那个maxQueueSize可以不用设置,默认为-1,使用的是SynchronousQueue。

hystrix.threadpool.default.coreSize=100

#hystrix.threadpool.default.maxQueueSize=1000

设置完成之后,又出现了一个问题,没错,又是time-out。

对于这个问题很好解决,设置断路器的超时,前面写过一篇在有道云笔记里面。为了偷懒还是复制一下代码吧

#断路器超时设置和请求的超时

hystrix.command.default.execution.timeout.enabled=true

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=300000

ribbon.ConnectTimeout=300000

ribbon.ReadTimeout=300000

现在就解决了。

原因:出现timeout的问题,基于我的理论,当然只是基于我的空想。

因为我请求的是一百个线程去访问,我们知道CPU的线程是上下文切换的,有些线程迟迟得不到执行权,就一直挂在那里了,一直挂,一直挂,直到满足了断路器的timeout,然后就被抛出异常了,这个线程也是很可怜QAQ。

后面采用了fallback,发现会拒绝执行fallback,原因也是线程太少,设置一下回退的线程数量就好了。

#设置回退的最大线程数

hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests=50

 

这篇关于Hystrix circuit short-circuited and is OPEN 异常的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334786

相关文章

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red