Debian系統中,Tomcat的日志默認存儲在$CATALINA_HOME/logs
目錄($CATALINA_HOME
通常為/usr/share/tomcatX
,X為版本號)。核心日志文件包括:
訪問日志是識別性能瓶頸的“入口”,重點關注響應時間、請求量、資源路徑三大指標:
awk
、grep
等工具分析日志,例如:
grep "GET" /var/log/tomcatX/localhost_access_log.2025-09-23.txt | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -nr
;awk '{sum+=$10; count++} END {print "Average response time: " sum/count "ms"}' /var/log/tomcatX/localhost_access_log.2025-09-23.txt
(假設第10列為響應時間);awk '$10 > 2000 {print $7, $10}' /var/log/tomcatX/localhost_access_log.2025-09-23.txt | sort -k2 -nr | head -20
(第7列為URL,第10列為響應時間)。catalina.out和localhost.YYYY-MM-DD.log中的錯誤信息是性能瓶頸的重要線索:
grep
過濾錯誤日志,例如:
OutOfMemoryError
(內存泄漏):grep -i "outofmemoryerror" /var/log/tomcatX/catalina.out
;SQLException
(數據庫問題):grep -i "sqlexception" /var/log/tomcatX/localhost.2025-09-23.log
;StackOverflowError
(遞歸或死循環):grep -i "stackoverflowerror" /var/log/tomcatX/catalina.out
。頻繁的垃圾回收(GC)會導致CPU占用升高、應用響應變慢。需先啟用GC日志(修改catalina.sh
):
JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tomcatX/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
然后分析GC日志:
grep
統計GC頻率(如每分鐘Full GC次數):grep "Full GC" /var/log/tomcatX/gc.log | awk '{print $1, $2}' | uniq -c
;-Xmx
/-Xms
、優化-XX:NewRatio
)。線程轉儲可顯示Tomcat線程的實時狀態(如運行、阻塞、等待),幫助識別死鎖、線程饑餓或長時間運行的線程:
jstack
命令(需知道Tomcat進程ID,通過ps -ef | grep tomcat
獲?。?pre class="hljs">jstack <tomcat_pid> > /var/log/tomcatX/thread_dump_$(date +%F_%T).log
jstack
自帶的死鎖檢測功能(日志中會標注deadlock
);Tomcat的性能受系統資源限制,需用工具監控服務器的CPU、內存、磁盤I/O、網絡狀態:
top
或htop
查看Tomcat進程的CPU占用(若接近100%,可能是CPU密集型任務或死循環);free -h
查看堆內存(-Xmx
設置的大?。┖头嵌褍却妫?code>-XX:MaxMetaspaceSize)的使用情況(若頻繁Full GC且內存未釋放,可能是內存泄漏);iostat -x 1
查看磁盤讀寫速度和I/O等待時間(若等待時間過高,可能是磁盤性能瓶頸或頻繁的文件IO操作);iftop
或nload
查看網絡流量(若帶寬占用過高,可能是大量數據傳輸或DDoS攻擊)。將日志分析與系統監控結果結合,定位具體瓶頸并采取對應措施:
maxActive
設置過?。┗蜴i競爭(如synchronized
塊過大),需調整連接池配置或優化鎖粒度;DEBUG
改為INFO
)或使用緩存。通過以上步驟,可系統性地從Tomcat日志中挖掘性能瓶頸,并結合系統監控和工具分析,制定針對性的優化方案。