Spring Boot 調優的 12 個關鍵節點

數據庫連接池調優:精準匹配系統資源

癥狀:
默認配置下,連接池資源使用不當,高并發時連接耗盡或排隊。

常見誤區:

spring:datasource:hikari:maximum-pool-size: 1000  # 設置過大connection-timeout: 30000  # 設置過長

推薦配置:

spring:datasource:hikari:maximum-pool-size: ${CPU核心數 * 2}minimum-idle: 5connection-timeout: 3000max-lifetime: 1800000idle-timeout: 600000

根據硬件環境(如 CPU 核心數)合理配置連接池,避免資源浪費。

JVM 參數優化:降低 GC 停頓帶來的抖動

建議啟動參數:

java-Xms4g-Xmx4g\
-XX:NewRatio=1\
-XX:+UseG1GC\
-XX:MaxGCPauseMillis=200\
-XX:InitiatingHeapOccupancyPercent=35\
-XX:+AlwaysPreTouch

將新生代與老年代等比設置,使用 G1 收集器,最大暫停時間控制在 200ms 內。

精簡自動裝配:去除不必要的組件

示例:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,SecurityAutoConfiguration.class
})

屏蔽當前未使用的自動裝配組件,有助于提升應用啟動速度與資源占用效率。

啟用響應壓縮:減少傳輸體積,提升響應速度

server:compression:enabled: truemime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/jsonmin-response-size: 1024

啟用 Gzip 壓縮功能,尤其對接口返回大量 JSON 數據的場景效果明顯。

接口參數校驗:防止資源被惡意占用

@GetMapping("/products")
public PageResult<Product> list(@RequestParam @Max(100) int pageSize,@RequestParam @Min(1) int pageNum) {// ...
}

通過注解式參數驗證,及時阻斷不合理請求,保護服務端資源。

異步執行任務:提升吞吐,釋放主線程

@Async("taskExecutor")
public CompletableFuture<List<Order>> process() {return CompletableFuture.completedFuture(doHeavyWork());
}@Bean("taskExecutor")
public Executor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(500);return executor;
}

適用于非實時或耗時較長的處理流程。

緩存機制接入:減少重復查詢壓力

@Cacheable(cacheNames = "products", key = "#id", cacheManager = "caffeineCacheManager")
public Product getProductDetail(Long id) {return productDao.getById(id);
}

使用 Caffeine 或 Redis 緩存,可有效減輕數據庫負擔,提升接口響應速度。

批量操作替代單條處理:成倍提升寫入效率

@Transactional
public void batchInsert(List<Product> products) {jdbcTemplate.batchUpdate("INSERT INTO product(name,price) VALUES(?,?)",products,500,(ps, product) -> {ps.setString(1, product.getName());ps.setBigDecimal(2, product.getPrice());});
}

將頻繁的單條操作合并為批處理,減少數據庫連接與事務開銷。

深度優化 SQL 與索引:保障查詢效率

場景問題:

SELECT * FROM products WHERE category = '手機' AND price > 5000 ORDER BY create_time DESC;

優化建議:

① 聯合索引:

ALTER TABLE products ADD INDEX idx_category_price_create (category, price, create_time);

② 覆蓋索引:

僅查詢索引字段:

SELECT id, category, price, create_time FROM products WHERE category ='手機'AND price > 5000 ORDERBY create_time DESC;

③ 避免函數索引失效:

錯誤:

WHERE DATE(create_time) = '2023-01-01'

正確:

WHERE create_time BETWEEN '2023-01-01 00:00:00' AND '2023-01-01 23:59:59'

④ 監控與分析:

SELECT*FROM sys.schema_index_statistics WHERE table_name ='products';

使用 EXPLAIN FORMAT=JSON 分析執行計劃。

自定義線程池:應對高并發的可控策略

@Bean("customPool")
public Executor customThreadPool() {return new ThreadPoolExecutor(10,50,60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1000),new CustomThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());
}

杜絕默認線程池帶來的資源不可控問題,自定義線程池策略更符合業務場景。

接口限流與熔斷:抵御突發流量沖擊

@SentinelResource(value = "orderQuery",blockHandler = "handleBlock",fallback = "handleFallback")
@GetMapping("/orders/{id}")
public Order getOrder(@PathVariable Long id) {return orderService.getById(id);
}public Order handleBlock(Long id, BlockException ex) {throw new RuntimeException("當前訪問過多,請稍后再試");
}public Order handleFallback(Long id, Throwable t) {return Order.getDefaultOrder();
}

使用 Sentinel 實現服務保護機制,避免單點失控造成連鎖故障。

全鏈路監控體系:問題診斷有據可依

management:endpoints:web:exposure:include: "*"metrics:export:prometheus:enabled: true

結合 Prometheus + Grafana 打造指標可視化平臺,全面掌握系統運行狀態。

總結

在這里插入圖片描述

優化三大原則:

1、預防為主
寫代碼時就要考慮性能;
2、指標驅動
以數據為依據來做優化;
3、持續迭代
性能調優是長期過程。

推薦工具集:

1、Arthas:線上問題診斷
2、JProfiler:性能分析
3、Prometheus + Grafana:指標監控系統

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82368.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82368.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82368.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端流行框架Vue3教程:28. Vue應用

28. Vue應用 應用實例 每個 Vue 應用都是通過 createApp函數創建一個新的 應用實例 main.js import {createApp} from vue import App from ./App.vue// app:Vue的實例對象 // 在一個Vue項目中&#xff0c;有且只有一個Vue的實例對象 const app createApp(App)/* 根組件選項…

MongoDB 數據庫遷移:完整指南與最佳實踐

在現代數據驅動的應用中&#xff0c;數據庫遷移是一項常見的任務&#xff0c;無論是升級 MongoDB 版本、更換服務器硬件&#xff0c;還是遷移到云環境&#xff08;如 MongoDB Atlas&#xff09;&#xff0c;都需要一個可靠的遷移策略。錯誤的遷移方式可能導致數據丟失、應用停機…

MQTT-Vue整合

Vue整合 依賴環境 nodejs 版本 > 18安裝 element plus npm install element-plus安裝 mqtt npm install mqtt初始化Vue項目 使用 vite 創建項目 執行命令 npm create vitelatest輸入項目名稱 vue-mqtt-demo MQTT連接 連接組件代碼 components/MqttDemo.vue <script…

IP 地址反向解析(IP反查域名)原理與應用

一、IP 地址反向解析的原理與技術細節 IP 地址反向解析&#xff08;Reverse IP Lookup&#xff09;是一種將 IP 地址映射回其關聯域名或主機名的網絡技術&#xff0c;與常見的正向 DNS 解析&#xff08;將域名解析為 IP 地址&#xff09;形成互補。這一過程在網絡安全研究、漏…

Mermaid 文件支持的圖表

Mermaid 文件后綴支持多種類型的圖表&#xff0c;包括但不限于&#xff1a; 流程圖&#xff1a;用于描述流程和決策的圖表&#xff0c;常用于業務流程的表示和分析。 時序圖&#xff1a;用于描述事件發生的順序和時序關系的圖表&#xff0c;常用于系統交互和消息傳遞的分析。 …

用 Python 構建自動駕駛的實時通信系統:讓車輛“交流”起來!

用 Python 構建自動駕駛的實時通信系統:讓車輛“交流”起來! 自動駕駛技術正加速變革全球交通體系,它不僅是機器學習與計算機視覺的勝利,更是一場 高效通信架構的革命。自動駕駛汽車需要實時交換信息,比如: 傳感器數據(雷達、激光雷達、攝像頭)V2V(車與車通信)V2X(…

PDF處理控件Aspose.PDF教程:以編程方式合并PDF文檔

合并 PDF 文檔是常見的需求——無論您是整理報告、合并發票還是整合掃描頁面。單一、統一的文件更易于在個人、學術或專業用途中共享、存儲和管理。 本文將向您展示如何使用 Aspose.PDF在C#、Java 和 Python中以編程方式合并 PDf 文件。 Aspose.PDF最新版下載 為什么使用 As…

.gitignore 的基本用法

.gitignore 文件是 Git 版本控制系統中一個非常重要的配置文件&#xff0c;用于指定哪些文件或目錄應該被 Git 忽略&#xff0c;不納入版本控制。合理使用 .gitignore 可以避免將臨時文件、編譯產物、敏感信息等不必要的文件提交到代碼倉庫中。 1. .gitignore 的基本用法 &…

華為OD機試真題——分糖果(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

通過chrome插件自動生成博客評論,高效發外鏈

最近crazy cattle 3d這個詞爆火&#xff0c;很多人都在做&#xff0c;競爭異常激烈&#xff0c;甚至可以說是慘不忍睹。 從最近的數據看&#xff0c;勝出的主要是crazycattle3d.com, crazycattle3d.io, crazy-cattle-3d.com這幾個&#xff0c;流量最高的crazycattle3d.com已經…

創建一個簡易的風扇動畫界面:基于 WPF 和 XAML 的實現教程

在本教程中&#xff0c;我們將通過使用 WPF (Windows Presentation Foundation) 和 XAML (Extensible Application Markup Language) 創建一個簡單的“臺式風扇”界面。我們將使用 XAML 繪制風扇的外觀&#xff0c;包含風扇葉片、風扇框架、支架和按鈕等元素&#xff0c;并通過…

VPet虛擬桌寵,一款桌寵軟件,支持各種互動投喂等. 開源免費并且支持創意工坊

&#x1f4cc; 大家好&#xff0c;我是智界工具庫&#xff0c;每天分享好用實用且智能的開源項目&#xff0c;以及在JAVA語言開發中遇到的問題&#xff0c;如果本篇文章對您有所幫助&#xff0c;請幫我點個小贊小收藏小關注吧&#xff0c;謝謝喲&#xff01;&#x1f618; 工具…

HTTP Digest 認證:原理剖析與服務端實現詳解

HTTP Digest 認證&#xff1a;原理剖析與服務端實現詳解 HTTP 協議中的 Digest 認證&#xff08;摘要認證&#xff09;是一種比 Basic 認證更安全的身份驗證機制&#xff0c;其核心設計是避免密碼明文傳輸&#xff0c;并通過動態隨機數&#xff08;Nonce&#xff09;防范重放攻…

PDF 表單按鈕動態邊框效果

問題描述 用戶在 Acrobat X 中創建 PDF 表單時遇到一個需求&#xff1a;表單以網格形式列出多個選項&#xff0c;當點擊某個選項時&#xff0c;需要在選項周圍顯示邊框&#xff08;圓形或方形&#xff09;&#xff0c;再次點擊時邊框消失。 試過的解決方案 在文本上方放置透…

部署Gitlab-CE with Docker私有云環境

應用環境 Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64) Docker version 28.1.1, build 4eba377 文章目錄 拉取容器鏡像生成Run腳本參數解讀實例腳本環境配置管理員密碼遺忘服務郵箱配置郵件測試 運維問題集錦(1) 端口映射關系(2) 服務日志(3) 分支受保護 項目操作…

MyBatis 的動態 SQL 特性來實現有值字段才進行插入或更新

MyBatis 動態 SQL 解決方案 <!-- 動態INSERT語句 --> <insert id"addDailyFreezeTer" parameterType"com.linyang.pecker.pojo.DailyFreezeTerminalBean">INSERT INTO dailyfreezeter_info<trim prefix"(" suffix")" …

網絡原理與 TCP/IP 協議詳解

一、網絡通信的本質與基礎概念 1.1 什么是網絡通信&#xff1f; 網絡通信的本質是跨設備的數據交換&#xff0c;其核心目標是讓不同物理位置的設備能夠共享信息。這種交換需要解決三個核心問題&#xff1a; 如何定位設備&#xff1f; → IP地址如何找到具體服務&#xff1f;…

CUDA編程筆記(1)--最簡單的核函數

本文用來記錄cuda編程的一些筆記以及知識 本筆記運行在windows系統&#xff0c;vs編譯器中&#xff0c;cuda版本是12.6 先看一下最基本的代碼例子&#xff1a; #include<iostream> #include<cstdio> #include "cuda_runtime.h" #include "device…

系統架構中的限流實踐:構建多層防護體系(二)

系統架構中的限流實踐:構建多層防護體系 一、接入層限流:流量攔截第一關二、應用層限流(服務內限流)Java生態方案對比三、分布式限流(跨服務限流)四、數據層限流(數據庫/緩存限流)1. 數據庫防護策略2. 緩存優化方案五、中間件層限流(消息隊列/分布式服務)六、客戶端限…

AI學習筆記二十八:使用ESP32 CAM和YOLOV5實現目標檢測

若該文為原創文章&#xff0c;轉載請注明原文出處。 最近在研究使用APP如何顯示ESP32 CAM的攝像頭數據&#xff0c;看到有人實現把ESP32 CAM的數據流上傳&#xff0c;通過YOLOV5來檢測&#xff0c;實現拉流推理&#xff0c;這里復現一下。 一、環境 arduino配置esp32-cam開發環…