1. 程式人生 > >Spring Cloud效能調優

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配置獨立執行緒池:

如果不設定獨立執行緒池,那麼HystrixThreadPoolKey 是 RibbonCommand 。

Hystrix併發配置引數請參考《Hystrix併發配置引數一節》

  • Zuul併發引數:

對於形如:

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/