Tomcat的主要日志文件位于$CATALINA_BASE/logs
目錄(通常為/var/log/tomcatX/
,X為實例編號),核心日志包括:
使用tail -f
命令實時監控日志文件的新增內容,重點關注線程相關的關鍵字(如“線程”“線程池”“請求處理”):
tail -f /var/log/tomcatX/catalina.out | grep -i "線程\|線程池\|處理請求"
或監控特定應用的日志(如localhost.log
):
tail -f /var/log/tomcatX/localhost.YYYY-MM-DD.log | grep -i "線程"
通過實時輸出,可快速發現線程數量的異常增長(如并發請求激增時的線程創建)或長時間阻塞的線程。
在日志中搜索以下關鍵字,定位線程的具體狀態:
java.lang.Thread.State: BLOCKED
);namePrefix
為線程名前綴,可通過server.xml
配置)。若日志中發現線程阻塞或死鎖線索,需通過**線程轉儲(Thread Dump)**獲取更詳細的線程狀態信息:
ps -ef | grep java | grep tomcat | awk '{print $2}'
jstack
命令將線程堆棧信息輸出到文件:jstack <PID> > /path/to/thread_dump.log
thread_dump.log
,搜索線程名(如catalina-exec-XX
),查看線程狀態(如RUNNABLE
、BLOCKED
、WAITING
)。例如,“BLOCKED”狀態的線程會顯示其等待的鎖對象,幫助定位死鎖或資源競爭問題。通過修改Tomcat的logging.properties
文件(位于$CATALINA_BASE/conf/
),調整線程相關日志的級別,記錄更詳細的線程活動:
org.apache.catalina
或org.apache.coyote
組件的日志級別,將其設置為INFO
或DEBUG
:org.apache.catalina.level = INFO
org.apache.coyote.level = DEBUG
systemctl restart tomcat
調整后,日志會記錄更多線程池的操作細節(如線程創建、銷毀、任務入隊)。對于復雜的線程問題,可使用以下工具提升分析效率:
catalina.out
和localhost.log
),支持顏色區分不同日志類型;通過以上方法,可全面監控Ubuntu下Tomcat的線程狀態,及時發現并發問題(如線程阻塞、死鎖)或性能瓶頸(如線程池耗盡),為問題排查和性能優化提供依據。