1、替換 tomcat
首先,把 tomcat 換成 undertow,這個(gè)性能在 Jmeter 的壓測(cè)下,undertow 比 tomcat 高一倍
第一步,pom 修改去除tomcat
org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-tomcatorg.springframework.bootspring-boot-starter-undertow
第二步,配置
server:
undertow:
max-http-post-size: 0
# 設(shè)置IO線程數(shù), 它主要執(zhí)行非阻塞的任務(wù),它們會(huì)負(fù)責(zé)多個(gè)連接, 默認(rèn)設(shè)置每個(gè)CPU核心一個(gè)線程,數(shù)量和CPU 內(nèi)核數(shù)目一樣即可
io-threads: 4
# 阻塞任務(wù)線程池, 當(dāng)執(zhí)行類似servlet請(qǐng)求阻塞操作, undertow會(huì)從這個(gè)線程池中取得線程,它的值設(shè)置取決于系統(tǒng)的負(fù)載 io-threads*8
worker-threads: 32
# 以下的配置會(huì)影響buffer,這些buffer會(huì)用于服務(wù)器連接的IO操作,有點(diǎn)類似netty的池化內(nèi)存管理
# 每塊buffer的空間大小,越小的空間被利用越充分
buffer-size: 1024
# 每個(gè)區(qū)分配的buffer數(shù)量 , 所以pool的大小是buffer-size * buffers-per-region
# buffers-per-region: 1024 # 這個(gè)參數(shù)不需要寫了
# 是否分配的直接內(nèi)存
direct-buffers: true
2、替換 HTTPClient
第一步,加依賴
io.github.openfeignfeign-httpclient
第二部,在 application.yml或者 bootstrap.yml 里面配置
# feign配置
feign:
hystrix:
# 在feign中開啟hystrix功能,默認(rèn)情況下feign不開啟hystrix功能
enabled: true
## 配置httpclient線程池
httpclient:
enabled: true
okhttp:
enabled: false
第三步,配置 HTTPClient Bean
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpPool {
@Bean
public HttpClient httpClient(){
System.out.println("===== Apache httpclient 初始化連接池開始===" );
// 生成默認(rèn)請(qǐng)求配置
RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
// 超時(shí)時(shí)間
requestConfigBuilder.setSocketTimeout(5 * 1000);
// 連接時(shí)間
requestConfigBuilder.setConnectTimeout(5 * 1000);
RequestConfig defaultRequestConfig = requestConfigBuilder.build();
// 連接池配置
// 長(zhǎng)連接保持30秒
final PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager(30, TimeUnit.MILLISECONDS);
// 總連接數(shù)
pollingConnectionManager.setMaxTotal(1000);
// 同路由的并發(fā)數(shù)
pollingConnectionManager.setDefaultMaxPerRoute(100);
// httpclient 配置
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
// 保持長(zhǎng)連接配置,需要在頭添加Keep-Alive
httpClientBuilder.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy());
httpClientBuilder.setConnectionManager(pollingConnectionManager);
httpClientBuilder.setDefaultRequestConfig(defaultRequestConfig);
HttpClient client = httpClientBuilder.build();
// 啟動(dòng)定時(shí)器,定時(shí)回收過(guò)期的連接
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("=====closeIdleConnections===");
pollingConnectionManager.closeExpiredConnections();
pollingConnectionManager.closeIdleConnections(5, TimeUnit.SECONDS);
}
}, 10 * 1000, 5 * 1000);
System.out.println("===== Apache httpclient 初始化連接池完畢===");
return client;
}
}
3、配置 Hystrix
第一步,依賴
org.springframework.cloudspring-cloud-starter-hystrix
第二步,配置
# 配置hystrix的參數(shù)
hystrix:
threadpool:
# default: 默認(rèn)參數(shù),作用的所有的hystrix的客戶端,如果需要對(duì)某個(gè)具體的接口,可以寫接口+方法名稱
default:
coreSize: 500
command:
default:
fallback:
# 是否開啟回退方法
enabled: true
execution:
isolation:
thread:
timeoutInMilliseconds: 30000 #缺省為1000
-
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213877 -
JAVA
+關(guān)注
關(guān)注
20文章
2989瀏覽量
109890 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3927瀏覽量
66273 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86802 -
性能優(yōu)化
+關(guān)注
關(guān)注
0文章
18瀏覽量
7530
發(fā)布評(píng)論請(qǐng)先 登錄
如何用ACM簡(jiǎn)化你的Spring Cloud微服務(wù)環(huán)境配置管理
EDAS再升級(jí)!全面支持Spring Cloud應(yīng)用
使用阿里云ACM簡(jiǎn)化你的Spring Cloud微服務(wù)環(huán)境配置管理
Dubbo Cloud Native 之路的實(shí)踐與思考
使用Spring Cloud與Docker實(shí)戰(zhàn)微服務(wù)

Spring Cloud Function基于Spring Boot的函數(shù)計(jì)算框架

RabbitRpc基于spring cloud的微服務(wù)rpc調(diào)用

Spring Cloud Gateway服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)教程
如何解決Spring Cloud下測(cè)試環(huán)境路由問(wèn)題
Spring Cloud Tencent發(fā)布最新匹配版本!
Spring Cloud 2022.0.0正式發(fā)布
Spring Cloud :打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān)

dubbo和spring cloud區(qū)別
Spring Cloud Gateway網(wǎng)關(guān)框架

評(píng)論