1. 代碼級優化:從根源減少慢查詢產生
通過Arthas等性能分析工具對代碼進行trace,定位接口處理中耗時較長的環節(如數據組裝、循環計算、不必要的數據庫訪問),針對性優化代碼邏輯。例如,減少循環內的重復查詢,將串行操作改為并行處理,優化數據結構(如用HashMap替代List進行快速查找),降低CPU和內存占用。
2. 數據庫查詢優化:解決慢查詢核心瓶頸
SELECT *
,只查詢必要字段;使用覆蓋索引(查詢字段均在索引中)減少回表操作;合理使用LIMIT
限制結果集大?。ㄈ绶猪摬樵儠r用LIMIT offset,size
);替換低效操作符(如用EXISTS
代替IN
,用JOIN
代替子查詢)。EXPLAIN
命令查看SQL執行計劃,關注type
列(理想值為ref
或range
,避免ALL
全表掃描),優化索引使用情況。3. Tomcat配置優化:提升請求處理能力
server.xml
的<Connector>
標簽中調整線程池參數(如maxThreads
設為100-200,根據并發量調整;minSpareThreads
設為20-50,保持最小空閑線程;maxSpareThreads
設為50-100,避免過多空閑線程占用內存),提高并發處理能力。logging.properties
中將日志記錄方式改為異步(如java.util.logging.ConsoleHandler.level = FINE
配合異步處理器),減少主線程因日志寫入的阻塞,提升請求響應速度。connectionTimeout
參數設置網絡連接超時時間(如20000毫秒),避免長時間等待數據庫或外部接口響應,及時釋放資源。4. JVM參數優化:減少GC停頓影響
-Xms
和-Xmx
設為物理內存的70%-80%,避免頻繁擴容),設置新生代(-Xmn
,如占總堆的1/3-1/2)和老年代比例(-XX:NewRatio
,如2表示新生代:老年代=1:2),優化對象晉升流程。-XX:+UseG1GC
開啟G1,設置-XX:MaxGCPauseMillis
目標停頓時間(如200毫秒),減少GC對系統性能的影響。5. 緩存技術應用:降低數據庫訪問頻率
query_cache_type=1
,query_cache_size=64M
),緩存SELECT查詢結果,對于重復查詢直接返回緩存數據(注意:MySQL 8.0及以上版本已移除查詢緩存)。6. 日志管理與監控:快速定位慢查詢
pt-query-digest
(針對MySQL慢查詢日志)、ELK Stack
(Elasticsearch+Logstash+Kibana)或Graylog
等工具,分析Tomcat慢查詢日志(如catalina.out
或訪問日志中的%D
字段,表示請求處理時間),找出執行時間長、頻率高的SQL語句。cronolog
或Tomcat的AccessLogValve
配置(如rotatable="true"
),按日期分割日志文件(如localhost_access_log.2025-09-17.txt
),避免日志文件過大占用磁盤空間,便于歷史查詢。