• Hystrix多个线程池切换执行超时带来的问题(图解)


     

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


    1571298992110-276.png

    上图有什么问题:

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

    场景:

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

    问题:

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

    如下图:

    1571299000374-477.png

    注意事项:

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

     

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

     

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

  • 相关阅读:
    Zookeeper 选举机制
    Hadoop Yarn任务调度器
    Hadoop Yarn工作机制 Job提交流程
    Hadoop 切片机制
    Hadoop MapReduce工作流程
    Hadoop HDFS读写数据流程
    数据仓库 拉链表
    高动态范围照片*5
    Java实现的窗口计算器
    拍摄制作星轨拖尾视频 之 前期拍摄
  • 原文地址:https://www.cnblogs.com/atliwen/p/11692851.html
Copyright © 2020-2023  润新知