最近在做Zuul网关的压测,发现只要超过100的并发量,网关就报错,按道理Zuul网关本质也是tomcat,遵循tomcat I/O模型,tomcat默认并发连接数是10000,即使达不到10000,也不能超过100就报错呀!
因为zuul默认是集成hystrix的,从starter结构可以看出来
为了进一步搞清楚这个并发量和Hystrix的关系,特进行了源码及的跟踪。
工具:jmeter、idea
版本:spring-cloud-starter-netflix-zuul:2.0.1.RELEASE、Hystrix-1.5.12
jmeter压测并发量设置100,没有问题,当设置200时出现大量错误
大致含义就是获取不到信号量,既然申请不到,那肯定是没有信号量了,那信号量从哪里获取呢?
从源码跟踪发现,默认值是这里设置的,也就是100,没有发现可扩展的地方,那一定有参数可以改它,hystrix官方文档给出的参数是不生效的(hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests),
这里使用zuul.semaphore.max-semaphores=200 ,这样就可以修改最大并发量了