高并发下springcloud hystrix的严重问题?
Posted
技术标签:
【中文标题】高并发下springcloud hystrix的严重问题?【英文标题】:serious issue of springcloud hystrix under high concurrency? 【发布时间】:2018-04-05 23:55:24 【问题描述】:第 1 部分
我使用 HystrixCommand 进行服务,并使用 jmeter 进行高并发测试。测试结果太差了,看流。 代码->
@HystrixCommand(fallbackMethod = "helloFallback")
@RequestMapping(value="/hello", method=RequestMethod.GET)
@ResponseBody
public ResponseResult hello() throws Exception
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(200);
responseResult.setData("bank test ok");
return responseResult;
public ResponseResult helloFallback()
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(400);
responseResult.setData("timeout error");
return responseResult;
测试结果:jmeter_test1
第二部分
但是,如果我注释掉HystrixCommand,测试结果是完美的。代码->
// @HystrixCommand(fallbackMethod = "helloFallback")
@RequestMapping(value="/hello", method=RequestMethod.GET)
@ResponseBody
public ResponseResult hello() throws Exception
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(200);
responseResult.setData("bank test ok");
return responseResult;
public ResponseResult helloFallback()
ResponseResult responseResult = new ResponseResult();
responseResult.setCode(400);
responseResult.setData("timeout error");
return responseResult;
测试结果->jmeter_test2
提示:线程图片 jmeter_test3
无论我使用zuul直接转发和调用服务,测试结果都是一样的。那么是高并发时springcloud hystrix的问题还是我的代码有问题。欢迎任何回复!
【问题讨论】:
【参考方案1】:首先,请尝试调整以下属性。
hystrix.threadpool.default.coreSize
默认线程池大小仅为 10,对于您的性能测试而言,它的大小非常小。
在您使用 hystrix 的第一次测试中,您可以看到 31% 的错误率。这可能意味着可能有很多线程池被拒绝,因为默认线程池只有 10 个。
如您所知,Hystrix 通过断路器提供了很好的隔离,并且需要一些成本来处理它。所以一些性能下降是无法避免的。但是你的测试结果看起来不正常。
你可以找到更多关于hystrix配置的细节here
【讨论】:
以上是关于高并发下springcloud hystrix的严重问题?的主要内容,如果未能解决你的问题,请参考以下文章