zoukankan      html  css  js  c++  java
  • 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,所以,请确保正确配置连接或者读取/写入的超时时间。

  • 相关阅读:
    javascript命名空间的简单实现
    javascript变量的作用域
    Python单元测试框架
    opencv中遍历图片数据的两种方法
    hsv 与 hsi 颜色空间
    OpenCV资料
    Linux下查看文件和文件夹大小
    The run destination iPhone 5.0 Simulator is not valid for running the scheme 'MyApp'
    OpenCV函数学习之cvLUT
    Linux中find常见用法示例
  • 原文地址:https://www.cnblogs.com/atliwen/p/11692851.html
Copyright © 2011-2022 走看看