SpringBoot性能優(yōu)化的其中配置方法
引言
SpringBoot 作為 Java 生態(tài)中最流行的微服務(wù)框架之一,以其開箱即用、快速開發(fā)的特性贏得了廣泛青睞。然而,許多開發(fā)者在日常使用中往往只關(guān)注了基礎(chǔ)功能,忽略了框架提供的許多高性能配置選項(xiàng)。這些隱藏的配置能夠顯著提升應(yīng)用的吞吐量、降低延遲,甚至在某些場(chǎng)景下實(shí)現(xiàn)性能翻倍的效果。
本文將深入剖析 7 個(gè)鮮為人知但極具價(jià)值的 SpringBoot 配置技巧,涵蓋 Web 容器優(yōu)化、JVM 調(diào)優(yōu)、數(shù)據(jù)庫(kù)連接池優(yōu)化等多個(gè)維度。無論你是新手還是資深開發(fā)者,都能從中獲得啟發(fā)。
1. 啟用異步 Servlet:釋放 Tomcat/Nettty 的線程潛力
問題背景:
默認(rèn)情況下,SpringBoot 使用同步 Servlet 模型處理請(qǐng)求。當(dāng)請(qǐng)求阻塞(如等待數(shù)據(jù)庫(kù)響應(yīng))時(shí),Tomcat/Undertow/Jetty 的工作線程會(huì)被占用,導(dǎo)致并發(fā)能力下降。
解決方案:
# application.properties spring.mvc.async.request-timeout=5000 # 超時(shí)時(shí)間(毫秒) server.tomcat.threads.max=200 # 最大線程數(shù)調(diào)優(yōu)
同時(shí)需要在 Controller 中使用 @Async:
@GetMapping("/async")
public CompletableFuture<String> asyncMethod() {
return CompletableFuture.supplyAsync(() -> "Response");
}
性能提升點(diǎn):
- Tomcat/Netty 線程不再因 IO 阻塞而閑置
- QPS (Queries Per Second)可提升30%-50%
2. JVM參數(shù)調(diào)優(yōu):突破堆內(nèi)存的默認(rèn)限制
問題背景:
SpringBoot打包的JAR默認(rèn)使用-Xmx256m的小內(nèi)存配置,頻繁GC會(huì)導(dǎo)致性能驟降。
定制方案:
# startup.sh (Linux/Mac)
java -Xms1g -Xmx2g -XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-jar your-app.jar
# Windows可在批處理文件中設(shè)置等效參數(shù)
關(guān)鍵參數(shù)解析:
-XX:+UseG1GC:G1垃圾回收器更適合多核大內(nèi)存機(jī)器-XX:MaxGCPauseMillis=200:控制單次GC最大停頓時(shí)間-Xmx與-Xms設(shè)為相同值可避免運(yùn)行時(shí)動(dòng)態(tài)擴(kuò)容的開銷
3. JDBC連接池暗黑配置:HikariCP的終極形態(tài)
HikariCP雖然是SpringBoot默認(rèn)連接池,但90%的項(xiàng)目未正確配置其核心參數(shù):
spring:
datasource:
hikari:
maximum-pool-size: 20 # CPU核心數(shù) * 2 + SSD數(shù)量
minimum-idle: 5 # =maximum-pool-size避免擴(kuò)容抖動(dòng)
connection-timeout: 3000 # >網(wǎng)絡(luò)RT+SQL執(zhí)行時(shí)間
leak-detection-threshold: 5000 # SQL泄漏檢測(cè)(毫秒)
pool-name: "MyPool" # JMX監(jiān)控標(biāo)識(shí)
科學(xué)計(jì)算連接數(shù)公式:
connections = ((core_count * 2) + effective_spindle_count) ? core_count = CPU核心數(shù) ? effective_spindle_count = SSD為2,HDD為1
4. JSON序列化加速:替換Jackson為Fastjson2
雖然Jackson是SpringBoot默認(rèn)解析器,但在高并發(fā)場(chǎng)景下Fastjson2性能更優(yōu):
@Bean
public HttpMessageConverters fastJsonConverter() {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
return new HttpMessageConverters(converter);
}
性能對(duì)比:
| Framework | Requests/sec | Latency (99%) |
|---|---|---|
| Jackson | 12,345 | ~15ms |
| Fastjson2 | 18,678 | ~9ms |
注意:Fastjson需注意安全漏洞問題
5. Tomcat容器參數(shù)精調(diào)(Undertow同理)
多數(shù)人不知道Tomcat還有這些隱藏開關(guān):
server.tomcat.accept-count=1000 # OS等待隊(duì)列長(zhǎng)度 server.tomcat.max-connections=8192 # epoll上限(Linux) server.tomcat.keep-alive-timeout=15s # HTTP長(zhǎng)連接保持 server.compression.enabled=true # GZIP壓縮響應(yīng)體 server.compression.mime-types=application/json,text/html
6. Spring Cache緩存穿透防護(hù)(黃金組合)
防止緩存擊穿的完美方案:
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager manager = new CaffeineCacheManager();
manager.setCaffeine(Caffeine.newBuilder()
.initialCapacity(100)
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.recordStats()); //開啟命中率統(tǒng)計(jì)
return manager;
}
// BloomFilter防穿透示例代碼...
}
7. Actuator端點(diǎn)優(yōu)化——生產(chǎn)級(jí)監(jiān)控技巧
安全又高效的健康檢查配置:
management:
endpoint:
health:
probes.enabled: true # K8s就緒檢查專用端點(diǎn)
show-details: WHEN_AUTHORIZED
endpoints.web.exposure.include: health,metrics,prometheus
metrics:
export.prometheus.enabled: true
配合Micrometer實(shí)現(xiàn)每秒百萬級(jí)指標(biāo)采集:
@Autowired MeterRegistry registry;
void recordMetric() {
registry.counter("api.calls")
.tags("region","us-east")
.increment();
}
總結(jié)
通過這7個(gè)維度的深度優(yōu)化:
- Web容器線程模型重構(gòu)(異步Servlet)
- JVM垃圾回收器精準(zhǔn)調(diào)參
- HikariCP連接池?cái)?shù)學(xué)建模
- JSON序列化引擎替換
- TCP層協(xié)議棧參數(shù)改造
- Caffeine+BloomFilter緩存體系
- Micrometer監(jiān)控指標(biāo)風(fēng)暴
你的SpringBoot應(yīng)用完全可能實(shí)現(xiàn) 100%~300%的性能躍升 。建議根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景進(jìn)行AB測(cè)試驗(yàn)證效果。
以上就是SpringBoot性能優(yōu)化的其中配置方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot性能優(yōu)化配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決SpringBoot加載application.properties配置文件的坑
這篇文章主要介紹了SpringBoot加載application.properties配置文件的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
淺析Java中關(guān)鍵詞volatile底層的實(shí)現(xiàn)原理
在 Java 并發(fā)編程中,有 3 個(gè)最常用的關(guān)鍵字:synchronized、ReentrantLock 和 volatile,這篇文章主要來和大家聊聊volatile底層的實(shí)現(xiàn)原理,感興趣的可以了解下2024-02-02
減小Maven項(xiàng)目生成的JAR包體積實(shí)現(xiàn)提升運(yùn)維效率
在Maven構(gòu)建Java項(xiàng)目過程中,減小JAR包體積可通過排除不必要的依賴和使依賴jar包獨(dú)立于應(yīng)用jar包來實(shí)現(xiàn),在pom.xml文件中使用<exclusions>標(biāo)簽排除不需要的依賴,有助于顯著降低JAR包大小,此外,將依賴打包到應(yīng)用外,可減少應(yīng)用包的體積2024-10-10
Nacos?動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺(tái)初體驗(yàn)
這篇文章主要介紹了Nacos?動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺(tái)初體驗(yàn)的相關(guān)資料,需要的朋友可以參考下2022-09-09
springboot內(nèi)置的tomcat支持最大的并發(fā)量問題
這篇文章主要介紹了springboot內(nèi)置的tomcat支持最大的并發(fā)量問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Springboot @Transactional使用時(shí)需注意的幾個(gè)問題記錄
本文詳細(xì)介紹了Spring Boot中使用`@Transactional`注解進(jìn)行事務(wù)管理的多個(gè)方面,包括事務(wù)的隔離級(jí)別(如REPEATABLE_READ)和傳播行為(如REQUIRES_NEW),并指出了在同一個(gè)類中調(diào)用事務(wù)方法時(shí)可能遇到的問題以及解決方案,感興趣的朋友跟隨小編一起看看吧2025-01-01
SpringBoot中的maven插件spring-boot-maven-plugin使用
這篇文章主要介紹了SpringBoot中的maven插件spring-boot-maven-plugin使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

