1. 收集關鍵日志文件
Tomcat的性能日志主要分布在Ubuntu系統的/var/log/tomcatX/
目錄下(X
為Tomcat實例編號),核心日志包括:
access_log
):記錄HTTP請求的詳細信息(如請求時間、響應時間、資源路徑、客戶端IP);catalina.out
或localhost.<date>.log
):記錄運行時錯誤、警告及異常堆棧;gc.log
):記錄垃圾回收(GC)的頻率、持續時間及內存回收情況(需提前在catalina.sh
中啟用-Xloggc
參數);2. 分析訪問日志:定位請求性能瓶頸
訪問日志是評估應用性能的前線數據,可通過以下命令提取關鍵指標:
awk '{print $4}' /var/log/tomcatX/access_log | cut -d: -f2 | sort | uniq -c | sort -nr
(按分鐘統計請求數,找出高峰時段);awk '$NF > 5' /var/log/tomcatX/access_log | awk '{print $1, $4, $7}'
(提取響應時間超過5秒的請求,分析耗時資源路徑);awk '{print $7}' /var/log/tomcatX/access_log | sort | uniq -c | sort -nr
(統計最常訪問的資源(如JSP、API接口),定位高頻瓶頸點)。3. 分析錯誤日志:識別潛在故障
錯誤日志中的異常信息能直接指向性能問題的根源,常見排查方向:
grep "OutOfMemoryError" /var/log/tomcatX/catalina.out
(若頻繁出現,需調整JVM堆內存參數-Xms
/-Xmx
);grep "deadlock" /var/log/tomcatX/catalina.out
(定位死鎖線程,優化同步邏輯);grep "Cannot get connection" /var/log/tomcatX/catalina.out
(檢查數據庫連接池配置是否合理)。4. 分析JVM日志:優化內存與GC性能
JVM日志反映了內存使用和垃圾回收的效率,需借助工具可視化分析:
jstat -gcutil <Tomcat_PID> 1000 10
(每秒刷新一次GC狀態,觀察Eden區、Old區使用率及GC時間);GCViewer
工具打開gc.log
,分析Full GC頻率(若頻繁Full GC,需增大Old區大小或更換GC算法(如G1));5. 分析線程轉儲:解決并發問題
線程轉儲能捕捉線程的實時狀態,用于排查死鎖、長時間阻塞等問題:
jstack <Tomcat_PID> > /path/to/thread_dump.log
(可多次生成對比,定位死鎖線程);VisualVM
或fastthread.io
工具上傳日志,查看“RUNNABLE”(運行中)、“BLOCKED”(阻塞)線程比例;若大量線程處于“BLOCKED”狀態,需優化同步代碼或增加線程池大小。6. 結合監控工具:實現自動化與可視化
為了更高效地分析性能,建議使用監控工具整合日志與系統指標:
7. 綜合優化建議
根據日志分析結果,針對性調整配置:
access_log
顯示高并發但線程池activeCount
接近maxThreads
,需增加server.xml
中<Connector>
的maxThreads
參數(如從200調整至500);gc.log
顯示頻繁Full GC,需增大-Xmx
(最大堆內存,如從4GB調整至8GB)或更換GC算法(如-XX:+UseG1GC
);access_log
中數據庫請求響應時間長,需優化SQL查詢或增加數據庫連接池大?。ㄈ?code>maxActive從50調整至100);server.xml
中配置compression="on"
)或CDN加速,減少服務器負載。