Ubuntu下JSP性能監控方法與工具
基礎環境監控是性能排查的起點,用于確認服務器資源(CPU、內存、磁盤、網絡)是否成為瓶頸。
top
(動態顯示進程CPU占用,按P
鍵按CPU排序)、htop
(增強版top
,支持鼠標操作)命令,重點關注java
進程的CPU使用率(若持續超過70%,可能存在線程阻塞或死循環)。free -m
查看內存總量、已用/剩余內存及緩沖區使用;ps aux | grep java
查看JVM堆內存分配(如-Xms
初始堆大小、-Xmx
最大堆大?。?,若RES
(常駐內存)接近Xmx
,需考慮擴容。df -h
查看各分區磁盤空間(確保/
根分區剩余空間大于20%),iotop
(需安裝)監控磁盤I/O(若java
進程的READ/WRITE
值過高,可能因頻繁讀寫文件導致性能下降)。iftop
(需安裝)查看網絡接口流量(如eth0
),關注入站/出站帶寬占用(若帶寬占用超過80%,可能導致請求延遲)。日志是排查性能問題的重要線索,通過分析Tomcat日志可快速定位錯誤、慢請求及資源瓶頸。
catalina.out
(包含所有輸出)和localhost_access_log.*.txt
(記錄訪問詳情,如請求時間、URL、響應狀態碼),使用grep
、awk
等工具提取關鍵信息(如grep " 500 " catalina.out
查找500錯誤,awk '{print $4,$7}' localhost_access_log.2025-10-20.txt | sort | uniq -c
統計熱門URL)。catalina.out
或localhost.date.log
中的ERROR
級別日志(如數據庫連接失敗、空指針異常),及時修復導致性能崩潰的異常。應用性能監控(APM)工具可提供CPU、內存、線程、數據庫等維度的詳細數據,幫助快速定位瓶頸。
jvisualvm
命令啟動),支持監控本地/遠程JVM的CPU、內存、線程狀態,還能生成堆轉儲(Heap Dump)分析內存泄漏(如查看Histogram
中的對象數量),適合日常巡檢。性能測試是評估JSP應用在高并發場景下表現的重要手段,通過模擬真實用戶請求,找出系統的性能極限。
apache-jmeter-5.4.1.tgz
),解壓后進入bin
目錄,運行./jmeter.sh
啟動。http://localhost:8080/test.jsp
)。監控的目的是發現問題并優化,結合監控結果可采取以下措施提升JSP性能:
<% %>
中的邏輯移至Servlet),使用JSTL/EL表達式替代腳本代碼(如<c:forEach>
替代<% for() %>
),啟用JSP緩存(在web.xml
中配置<jsp-config><page-encoding>UTF-8</page-encoding><jsp-property-group><url-pattern>*.jsp</url-pattern><el-ignored>false</el-ignored><scripting-invalid>false</scripting-invalid><is-xml>false</is-xml><include-prelude>/WEB-INF/jsp/common/header.jspf</include-prelude><include-coda>/WEB-INF/jsp/common/footer.jspf</include-coda></jsp-property-group></jsp-config>
),減少重復渲染。server.xml
中<Connector>
標簽的maxThreads
(最大并發線程數,默認200,可根據CPU核心數調整,如4*CPU核心數
)、acceptCount
(請求隊列長度,默認100,隊列滿則拒絕請求)、connectionTimeout
(連接超時時間,默認20000ms);啟用JSP預編譯(使用jspc
工具或Maven插件,在部署前將JSP編譯為Servlet,避免首次訪問延遲)。maxActive
(最大連接數,默認10)、maxIdle
(最大空閑連接數,默認5)、minIdle
(最小空閑連接數,默認5));開啟慢查詢日志(MySQL中執行SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1;
),分析并優化慢SQL(如添加索引、避免SELECT *
)。-XX:+UseG1GC
);調整堆內存大?。?code>-Xms與-Xmx
設置為相同值,避免頻繁擴容,如-Xms2048m -Xmx2048m
);啟用GC日志(-Xlog:gc*
或-verbose:gc -Xloggc:/var/log/gc.log
),分析GC頻率與停頓時間(若Full GC頻繁,需增加堆內存或優化對象生命周期)。