尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Hystrix线程池问题

Hystrix线程池问题 背景在一个以springcloud为基础架构的微服务项目中活动期间并发量一大就会出现服务调用失败的问题。经定位发现被调用服务中无对应的请求日志继续通过日志查询确认是feign调用时出现服务降级进入降级方法统一返回调用失败。通过jmeter做并发测试并发量一到20问题就会复现。我们知道feign的调用链路中内置了hystrix逻辑hystrix出现服务降级的情况有很多种下图展示了服务降级的场景从下图可知服务降级通常有三种原因。第一断路器是open状态此时所有的请求会进入到降级方法中。我们项目的实际情况是活动启动的瞬间并发高导致降级这种降级只是部分请求的降级故排除这种情况。第二请求被调用服务异常或者超时。被调用服务未查到相关日志且通过数据中的网络监控网络连接也是正常的故排除这种情况。第三线程池的线程数不够大量请求来不及处理无可用资源进入降级逻辑。这种情况比较符合我们实际情况可以继续排查。通过进一步分析我们得知默认的隔离策略是线程池隔离且线程池核心线程数为10。#模式配置hystrix.command.default.execution.isolation.strategy THREAD进一步了解线程池的隔离策略和执行逻辑。1.基于feign的服务调用时以服务名作为key值为该key值创建一个线程池默认大小为10各个服务名的线程池相互隔离。2.线程池的执行逻辑同jdk的ThreadPoolExecutor因此解决问题的关键是指定线程池核心线程数来应对并发需求配置完成后可通过并发测试进行验证。hystrix: threadpool: default: #基于feign的服务调用为每个服务各个渠道创建一个隔离的线程池核心线程数为50. coreSize: 50
返回列表