线程池切换带来的超时问题


​

上图有什么问题:

Controller的Hystrx线程池已经到了超时时间,而FeignClient的Hystrx线程池还没到超时时间。

场景:

  • Controller 抛出运行超时异常,进入熔断回退方法。
  • FeignClient 由于是单独的线程池并且超时时间还没到,所以继续执行,占用20-1的线程。

问题:

  • 其他的请求进入,调用FeignClient ,FeignClient 线程池应为超时时间未到来,线程已经沾满,进入等待中?(设置了等待队列并且断路器没有开启的情况下)。
  • Controller的Hystrx线程池在等待中已经到了超时时间,Controller继续失败,FeignClient 线程还在运行。
  • 恶性循环。。。。

如下图:

​

注意事项:

自定义的Hystrix线程池超时时间不要大于Feign的超时时间。

 

该问题在:hystrix运行原理官方文档 注意事项中 :

 

请注意,没有任何方式可以强制终止一个潜在[latent]的线程的运行,Hystrix能够做的最好的方式是让JVM抛出一个InterruptedException异常,如果你的任务被Hystrix所包装,并不意味着会抛出一个InterruptedExceptions异常,该线程在Hystrix的线程池内会进行执行,虽然在客户端已经接收到了TimeoutException异常,这个行为能够渗透到Hystrix的线程池中,[though the load is 'correctly shed'],绝大多数的Http Client不会将这一行为视为InterruptedExceptions,所以,请确保正确配置连接或者读取/写入的超时时间。

Hystrix多个线程池切换执行超时带来的问题(图解)的更多相关文章

  1. java并发编程(四) 线程池 & 任务执行、终止源码分析

    参考文档 线程池任务执行全过程:https://blog.csdn.net/wojiaolinaaa/article/details/51345789 线程池中断:https://www.cnblog ...

  2. hystrix熔断器之线程池

    隔离 Hystrix有两种隔离方式:信号量和线程池. 线程池隔离:对每个command创建一个自己的线程池,执行调用.通过线程池隔离来保证不同调用不会相互干扰和每一个调用的并发限制. 信号量隔热:对每 ...

  3. 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法

    [源码下载] 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法 作者:webabcd 介绍重新想象 Wi ...

  4. C# -- 使用线程池 ThreadPool 执行多线程任务

    C# -- 使用线程池 ThreadPool 执行多线程任务 1. 使用线程池 class Program { static void Main(string[] args) { WaitCallba ...

  5. ForkJoinPool线程池--分支执行

    import java.util.ArrayList; import java.util.concurrent.ExecutionException; import java.util.concurr ...

  6. 戏(细)说Executor框架线程池任务执行全过程(下)

    上一篇文章中通过引入的一个例子介绍了在Executor框架下,提交一个任务的过程,这个过程就像我们老大的老大要找个老大来执行一个任务那样简单.并通过剖析ExecutorService的一种经典实现Th ...

  7. Android AsyncTask内部线程池异步执行任务机制简要分析

    如下分析针对的API 25的AsyncTask的源码: 使用AsyncTask如果是调用execute方法则是同步执行任务,想要异步执行任务可以直接调用executeOnExecutor方法,多数情况 ...

  8. SpringCloud Hystrix熔断之线程池

    服务熔断 雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并导致服务雪崩的过程. 服务熔断:当服务提供者无法调用时,会通过断路器向调用方直接返回一个错误响应,而不是长时间的等待,避免服务雪 ...

  9. 解决Java线程池任务执行完毕后线程回收问题

      转载请注明出处:http://www.cnblogs.com/pengineer/p/5011965.html         对于经常使用第三方框架进行web开发的程序员来说,Java线程池理所 ...

随机推荐

  1. 使用druid连接池的超时回收机制排查连接泄露

    起因:系统连接池满了 Exception wait millis 60012, active 2000, maxActive 2000, creating 0 加配置排查: <!-- 超过时间限 ...

  2. oracle查询数据库连接数相关

    select username,count(username) from v$session where username is not null group by username;--查询各个用户 ...

  3. 网络OSI和TCP/IP参考模型详解

    网络模型 对应协议 转载自: https://www.2cto.com/kf/201612/576253.html

  4. AS400 printer setting

    (1) CRTOUTQ OUTQ(TESTLIB/PRINTER2) (2) CRTDEVPRT ===> CRTDEVPRT DEVD(PRINTER2) DEVCLS(*LAN) TYPE( ...

  5. 2019暑期金华集训 Day2 线性代数

    自闭集训 Day2 线性代数 高斯消元 做实数时,需要找绝对值最大的作为主元,以获取更高精度. 在欧几里得环(简单例子是模合数)意义下也是对的.比如模合数意义下可以使用辗转相除法消元. 欧几里得环:对 ...

  6. Python3 输入和输出(一)

    1.输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数. 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用. 如果希望输出 ...

  7. 让vim更加智能化

    从此,让我的vim更加的智能化,整整用了一个周日,基本是值得的: "新建.c\.cpp\.python\.sh等文件时,使用定义的函数SetTitle,自动插入文件头 func SetTit ...

  8. 数据库——JavaWEB数据库连接

    一.数据库连接的发展 1.数据库连接 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  9. cannot load from mysql.proc. the table is probably corrupted 解决办法

    执行以下命令:mysql_upgrade -u root -p 密码 mysql5.5及5.5以上的版本开始,mysql数据库中proc表中的comment字段的列属性已经由char(64)改为tex ...

  10. h5播放rtsp流

    最近由于项目上需要一个摄像头在线预览的功能,于是便琢磨了一个小玩意出来分享分享.项目是在win上,合作的人懂js,基于这样的情况,我只选择nodejs作为开发.并未使用php相关. 一开始做这个,我并 ...