服務器資源瓶頸排查
使用free -m
查看物理內存使用情況,通過ps aux | grep java
或JConsole監控JVM堆內存分配(建議合理設置-Xms
與-Xmx
避免頻繁GC);用top
/htop
分析CPU負載,若java
或mysqld
占用過高需排查后臺線程或數據庫慢查詢;通過iotop
、iostat -x
檢查磁盤I/O性能,若響應時間長需優化JSP頻繁讀寫文件的邏輯。
Tomcat性能調優
調整server.xml
中的連接器參數:增大maxThreads
(最大并發線程數,默認200可調整至300-500)、minSpareThreads
(最小空閑線程數,默認10可調整至20),設置合理的acceptCount
(請求隊列長度,默認100可調整至100-200),避免高并發下請求排隊;啟用GZIP壓縮(compression="on"
,compressableMimeType
包含text/html
、application/javascript
等),減少傳輸數據量;開啟JSP預編譯(通過jspc
工具或Maven插件),避免首次訪問時的編譯延遲。
數據庫響應優化
使用HikariCP、DBCP等連接池(設置maxActive
、maxIdle
、minIdle
參數),避免頻繁創建/銷毀數據庫連接;開啟MySQL慢查詢日志(SET GLOBAL slow_query_log = 'ON'
,SET GLOBAL long_query_time = 1
),通過EXPLAIN
分析SQL語句,為查詢字段添加索引,避免全表掃描;優化JSP中的數據庫操作,將業務邏輯移至Servlet或JavaBean,減少JSP頁面中的直接數據庫調用。
JSP代碼層面優化
減少JSP中的Java代碼(Scriptlet),將邏輯移至后端;使用JSTL(如<c:forEach>
、<c:if>
)和EL表達式(${variable}
)替代Scriptlet,提高頁面渲染速度;對不變內容(如頁頭、頁腳)啟用頁面緩存(如EHCache),減少重復運算;控制HttpSession
的屬性數量與大?。ㄈ绫苊獯鎯Υ髮ο螅?,設置合理的會話超時時間(session.setMaxInactiveInterval(30*60)
)。
JVM調優
選擇合適的GC算法(高并發應用推薦G1 GC),配置JVM參數如-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=100
(初始/最大堆內存2GB,G1 GC最大停頓時間100ms);啟用GC日志(-Xlog:gc*
或-verbose:gc -Xloggc:/var/log/gc.log
),監控GC頻率與停頓時間;升級至JDK 11及以上版本(性能與GC管理優于JDK 8),并進行兼容性測試。
靜態資源與網絡優化
使用CDN加速靜態資源(CSS、JavaScript、圖片),將靜態資源托管至CDN節點,減少用戶訪問延遲;對靜態資源啟用瀏覽器緩存(如Cache-Control: max-age=3600
)和服務器端GZIP壓縮,減少傳輸數據量;通過ping
、mtr
測試客戶端到服務器的網絡延遲,使用iftop
監控帶寬使用情況,優化網絡帶寬或調整服務器位置。
負載均衡與集群部署
當單臺服務器壓力過大時,使用Nginx作為反向代理(配置upstream
模塊),將請求分發至多臺Tomcat實例;配置Tomcat集群(通過Cluster
標簽),實現會話復制(<Manager className="org.apache.catalina.ha.session.DeltaManager"/>
),提高系統可用性與擴展性。
系統資源監控與工具使用
使用top
、htop
、vmstat
實時監控服務器CPU、內存、磁盤使用情況;通過jstack
分析線程阻塞(如查看死鎖),jmap
查看內存占用(如堆內存泄漏),定位性能瓶頸;使用VisualVM、JProfiler等工具進行性能分析,找出高消耗的方法或SQL,針對性優化。