Spring Cloud调优记录(版本Finchley.RELEASE)
记一下自己针对Spring Cloud调优的过程
1.Zuul网关信号量调整
zuul对请求是信号量隔离,当一个请求达到最大信号量,则直接熔断。 默认为100
zuul请求对于单个host连接数和总共连接数有限制,也需要调整连接数
zuul:
semaphore:
max-semaphores: 1000 # zuul对请求是信号量隔离,当一个请求达到最大信号量,则直接熔断。 默认为100
host:
socket-timeout-millis: 60000
connect-timeout-millis: 60000
max-per-route-connections: 200 #单个host最大连接数
max-total-connections: 1000 #总最大连接数
2.各个服务feign采用HttpClient (存在调用其他服务时)
feign默认是采用JDK的http组件来发送请求,替换为httpClient能大大提升发送请求的效率。
依赖如下包: httpclient的包可以不依赖,如果有版本要求可以依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>8.17.0</version>
</dependency>
feign对于httpClient的配置在HttpClientFeignLoadBalancedConfiguration类中:
默认已经配置了HttpClientConnectionManager,没有特殊要求就不需要自己去重写了。
@Bean
@ConditionalOnMissingBean(HttpClientConnectionManager.class)
public HttpClientConnectionManager connectionManager(
ApacheHttpClientConnectionManagerFactory connectionManagerFactory,
FeignHttpClientProperties httpClientProperties) {
final HttpClientConnectionManager connectionManager = connectionManagerFactory
.newConnectionManager(httpClientProperties.isDisableSslValidation(), httpClientProperties.getMaxConnections(),
httpClientProperties.getMaxConnectionsPerRoute(),
httpClientProperties.getTimeToLive(),
httpClientProperties.getTimeToLiveUnit(), registryBuilder);
this.connectionManagerTimer.schedule(new TimerTask() {
@Override
public void run() {
connectionManager.closeExpiredConnections();
}
}, 30000, httpClientProperties.getConnectionTimerRepeat());
return connectionManager;
}
feign.httpclient.enabled属性设置为true (网关存在调用其他服务时)
feign:
hystrix:
enabled: true
httpclient:
enabled: true
maxConnectionsPerRoute: 200
maxConnections: 1000
3.各个服务调整Ribbon参数 (存在调用其他服务时)
ribbon:
eureka:
enabled: true
MaxConnectionsPerHost: 200 #单个host最大连接数
MaxTotalConnections: 1000 #总最大连接数
PoolMaxThreads: 1000 #ribbon的最大工作线程数
ReadTimeout: 60000
ConnectTimeout: 60000
4. 调整Histrix线程池参数
hystrix:
threadpool:
default:
coreSize: 100
maxQueueSize: 1000
queueSizeRejectionThreshold: 1000
4. 替换tomcat为undertow(网上说的,我没实战先记录吧)
5.其他
关闭一些不必要的日志,如sql打印,调整数据库连接,避免等待连接时间过长