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型別發生了變化
|
如果想對特定的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/