Spring Cloud性能调优

 

Spring Cloud整合了各种组件,每个组件往往还有各种参数,并且不同spring cloud版本参数可能不同。本文来详细探讨Spring Cloud各组件的调优参数。欢迎联系我的QQ:59753374 或微信:jawfneo,补充或者勘误,一起总结出最全、最实用的调优参数。

Tomcat配置参数

 

server:

  tomcat:

    max-connections: 0 # 默认值

    max-threads: 0 # 默认值

 

Hystrix配置参数

 

  • 如隔离策略是THREAD(zuul的隔离策略设置为THREAD后需设置此处参数):
 

hystrix.threadpool.default.coreSize: 10

hystrix.threadpool.default.maximumSize: 10

hystrix.threadpool.default.maxQueueSize: -1 # 如该值为-1,那么使用的是SynchronousQueue,否则使用的是LinkedBlockingQueue。注意,修改MQ的类型需要重启。例如从-1修改为100,需要重启,因为使用的Queue类型发生了变化


hystrix.command.default.execution.timeout.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000 #default is 1000(1秒),这个超时时间要根据CommandKey所对应的业务和服务器所能承受的负载来设置,要根据CommandKey业务的平均响应时间设置,一般是大于平均响应时间的20%~100%,最好是根据压力测试结果来评估,这个值设置太大,会导致线程不够用而会导致太多的任务被fallback;设置太小,一些特殊的慢业务失败率提升,甚至会造成这个业务一直无法成功,在重试机制存在的情况下,反而会加重后端服务压力。

如果想对特定的HystrixThreadPoolKey 进行配置,则将default 改为 HystrixThreadPoolKey 即可

  • 如果隔离策略是SEMAPHORE(默认隔离策略):
 

hystrix.command.default.execution.isolation.strategy: SEMAPHORE

hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests: 10 # 默认值

如果想对指定的HystrixCommandKey 进行配置,则将default 改为HystrixCommandKey 即可。

Feign配置参数

Feign默认没有线程池。

当使用HttpClient时,可如下设置:

 

feign:

  httpclient:

    enabled: true

    max-connections: 200 # 默认值

    max-connections-per-route: 50 # 默认值

代码详见:

  • org.springframework.cloud.netflix.feign.FeignAutoConfiguration.HttpClientFeignConfiguration#connectionManager
  • org.springframework.cloud.netflix.feign.ribbon.HttpClientFeignLoadBalancedConfiguration.HttpClientFeignConfiguration#connectionManager

当使用OKHttp时,可如下设置:

 

feign:

  okhttp:

    enabled: true

  httpclient:

    max-connections: 200 # 默认值

    max-connections-per-route: 50 # 默认值

代码详见:

  • org.springframework.cloud.netflix.feign.FeignAutoConfiguration.OkHttpFeignConfiguration#httpClientConnectionPool
  • org.springframework.cloud.netflix.feign.ribbon.OkHttpFeignLoadBalancedConfiguration.OkHttpFeignConfiguration#httpClientConnectionPool

Zuul配置参数

我们知道Hystrix有隔离策略:THREAD 以及SEMAPHORE ,默认是 SEMAPHORE 。

隔离策略

 

zuul:

  ribbon-isolation-strategy: thread

最大信号

当Zuul的隔离策略为SEMAPHORE时:

设置默认最大信号量:

 

zuul:

  semaphore:

    max-semaphores: 100 # 默认值

设置指定服务的最大信号量:

 

zuul:

  eureka:

    <commandKey>:

      semaphore:

        max-semaphores: 100 # 默认值

参考:

Zuul参数

  • Hystrix并发参数

Edgware及之后的版本中,当Zuul的隔离策略为THREAD时,可为Hystrix配置独立线程池:

参考:http://www.itmuch.com/spring-cloud/edgware-new-zuul-hystrix-thread-pool/

如果不设置独立线程池,那么HystrixThreadPoolKey 是 RibbonCommand 。

Hystrix并发配置参数请参考《Hystrix并发配置参数一节》

  • Zuul并发参数:

Zuul内置的Filterhttp://www.itmuch.com/%2Fspring-cloud%2Fzuul%2Fzuul-filter-in-spring-cloud%2F

对于形如:

 

zuul:

  routes:

    user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。

      url: http://localhost:8000/ # 指定的url

      path: /user/** # url对应的路径。

的路由,可使用如下方式配置并发参数:

 

zuul:

  host:

    max-total-connections: 200 # 默认值

    max-per-route-connections: 20 # 默认值

  • 当Zuul底层使用的是Apache HttpClient时,对于使用Ribbon的路由,可使用如下方式配置并发参数:
 

serviceId:

  ribbon:

    MaxTotalConnections: 0 # 默认值

    MaxConnectionsPerHost: 0 # 默认值

相关代码:org.springframework.cloud.netflix.ribbon.support.AbstractLoadBalancingClient 子类的createDelegate 方法。

 

 

Ribbon配置参数

 - zuul 重试机制

 

 

#enable connection retry

zuul.retryable=true

ribbon.MaxAutoRetries=3

ribbon.MaxAutoRetriesNextServer=3

 - Ribbon

 

 

#read to response timeout

ribbon.ReadTimeout=60000

#get connection timeout

ribbon.ConnectTimeout=2000

 

部分转载自:http://www.itmuch.com/spring-cloud-sum/spring-cloud-concurrent/

参考:https://blog.csdn.net/tongtong_use/article/details/78611225

https://jadyer.cn/2017/04/14/springcloud-hystrix/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值