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

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

zuul组件封装了feign,重改了feign的默认配置,所以相同情况下不会出现

Hystrix circuit short-circuited and is OPEN 等到问题

记一次feign的问题排查(短路、线程池、队列)的更多相关文章

  1. 记一次线上bug排查-quartz线程调度相关

    记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...

  2. 解Bug之路-记一次存储故障的排查过程

    解Bug之路-记一次存储故障的排查过程 高可用真是一丝细节都不得马虎.平时跑的好好的系统,在相应硬件出现故障时就会引发出潜在的Bug.偏偏这些故障在应用层的表现稀奇古怪,很难让人联想到是硬件出了问题, ...

  3. Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程

    线上某服务 A 调用服务 B 接口完成一次交易,一次晚上的生产变更之后,系统监控发现服务 B 接口频繁超时,后续甚至返回线程池耗尽错误 Thread pool is EXHAUSTED.因为服务 B ...

  4. feign hystrix 线程池伸缩控制

    当前使用的版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  5. 记一次Task抛异常,调用线程处理而引发的一些随想

    记一次Task抛异常,调用线程处理而引发的一些随想 多线程调用,任务线程抛出异常如何在另一个线程(调用线程)中捕获并进行处理的问题. 1.任务线程在任务线程执行语句上抛出异常. 例如: private ...

  6. FeignClient spi 调用 短路异常 & 线程池配置

    FeignClient spi 调用 短路异常 & 线程池配置 默认配置见:HystrixThreadPoolProperties 线程池对象:com.netflix.hystrix.Hyst ...

  7. 记一次 医院.NET公众号系统 线程CPU双高分析

    一:背景 1. 讲故事 上周四有位朋友加wx咨询他的程序出现 CPU + 线程 双高的情况,希望我能帮忙排查下,如下图: 从截图看只是线程爆高,没看到 cpu 爆高哈,有意思的是这位朋友说他: 一直在 ...

  8. JavaScript新手学习笔记4——我记不住的几个坑:短路逻辑、按值传递、声明提前

    1.短路逻辑 逻辑运算中,如果前一个条件已经可以得出最终结论,则后续所有条件不再执行!这里的逻辑运算指的是逻辑与和逻辑或. 我们要理解逻辑与是两个条件都为真的时候,才为真,如果第一个就是假的,那么后面 ...

  9. 记一次node节点异常排查

    一.背景 公司进行kubernetes服务重启演练,集群重启后所有服务正常,仅node2节点处于notready状态 二.排查过程 查看对应节点的详细信息,发现kubelet一直处于starting状 ...

随机推荐

  1. golang+webgl实践激光雷达(一)激光扫描仪基础知识

    一.前言 最近做一个测量料堆形状的项目,通过前期调研,最后决定用激光测距原理进行测量.通过旋转云台+激光扫描仪实现空间三维坐标的测量.其中激光扫描仪扫射的是一个二维的扫描面,再通过云台旋转,则形成一个 ...

  2. 【cf961G】G. Partitions(组合意义+第二类斯特林数)

    传送门 题意: 给出\(n\)个元素,每个元素有价值\(w_i\).现在要对这\(n\)个元素进行划分,共划分为\(k\)组.每一组的价值为\(|S|\sum_{i=0}^{|S|}w_i\). 最后 ...

  3. 【学习笔记】C/C++

    1. C语言中的 scanf() 函数 该函数包含在头文件 <stdio.h> 或者 <cstdio> (在C++中使用时) 函数的返回值指的是 所输入的数据与格式字符串匹配的 ...

  4. SimpleDateFormat类简单学习

    一.简介 SimpleDateFormat是一个格式化和解析日期的具体类,其可以将时间转化为指定格式的日期字符串,也可以将具有格式的日期字符串转换为时间. formatting (date → tex ...

  5. CAD转PDF的软件哪个比较好用?用这两个很方便

    大家都知道编辑CAD图纸是需要借助CAD制图软件来进行绘制的,而且CAD制图软件很多的设计师们都在使用.但是CAD中的图纸格式为dwg格式的,不想要使用CAD软件来查看图纸的话,就需要将CAD转换成P ...

  6. vue-cli 3.0按需引入element-ui

    vue-cli 3.0脚手架初始化项目成功后,如果需要按需引入element-ui,按照官网的教程,会报如下错误: 这个是由于babel编译插件版本问题,需要安装最新的babel编译插件“@babel ...

  7. JavaScript基础6

    计时器 setInterval()   按照指定周期来调用函数或计算表达式     以毫秒计算 语法    setInterval(code,millisec[,“lang”]) code 要调用的函 ...

  8. Mybatis的逆向工程,自动生成代码(Mapper,xml,bean)

    步骤: 1. 新建一个Maven项目: 然后导入maven依赖: <dependencies> <dependency> <groupId>org.mybatis& ...

  9. 对于写Java的博文

    其实我是有过想要自己总结java相关的知识点给大家分享,但我的Java并不很好,大多数情况我只是拿Java当工具,写一些自己所需一些简单的东西,因此,大多数碰到我不懂的Java问题时,我也是上博客园, ...

  10. python列表转换为字符串

    对于非纯字符串组成的列表,需要使用map(str, 列表)转换,纯字符串组成的列表则不需要转换 list1 = [1, 2, 3, 4, 5]c = ','.join(map(str,list1))p ...