Tomcat的日志文件默認存儲在$CATALINA_HOME/logs
目錄下($CATALINA_HOME
為Tomcat安裝目錄),常見日志文件及作用如下:
server.xml
中啟用),包含請求URL、響應狀態碼等信息。使用tail -f
命令實時查看日志文件的更新,快速捕捉最近的錯誤或異常:
tail -f $CATALINA_HOME/logs/catalina.out
該命令會持續輸出catalina.out
文件的最后幾行,當有新日志寫入時自動刷新,適合排查正在發生的故障(如服務突然崩潰、請求超時)。
通過grep
命令篩選出包含關鍵字的日志行,縮小問題范圍:
grep -i "error" $CATALINA_HOME/logs/catalina.out # 查找所有ERROR級別的日志(不區分大小寫)
grep -i "exception" $CATALINA_HOME/logs/catalina.out # 查找異常堆棧信息
grep -i "outofmemoryerror" $CATALINA_HOME/logs/catalina.out # 查找內存溢出錯誤
-i
參數表示忽略大小寫,可根據具體問題替換關鍵字(如severe
、failed
、timeout
)。
通過日志中的關鍵字快速識別問題根源,并采取對應措施:
內存溢出(OutOfMemoryError):
日志特征:java.lang.OutOfMemoryError: Java heap space
(堆內存不足)或PermGen space
(永久代內存不足)。
解決方法:調整JVM內存參數,在$CATALINA_HOME/bin/catalina.sh
中增加:
JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
(-Xms
為初始堆大小,-Xmx
為最大堆大小,根據服務器配置調整)。
端口沖突:
日志特征:SEVERE: Failed to initialize connector [Connector[HTTP/1.1-8080]]
+ java.net.BindException: Address already in use
。
解決方法:使用netstat
命令查找占用端口的進程,終止該進程或修改Tomcat端口:
netstat -tuln | grep 8080 # 查找占用8080端口的進程
lsof -i :8080 # 查看進程ID
kill -9 <PID> # 終止進程
或修改$CATALINA_HOME/conf/server.xml
中的<Connector>
端口(如將8080改為8081)。。
類加載失?。–lassNotFoundException/NoClassDefFoundError):
日志特征:java.lang.ClassNotFoundException: com.example.HelloServlet
或NoClassDefFoundError
。
解決方法:檢查WEB應用的WEB-INF/classes
目錄是否存在對應的.class
文件,或WEB-INF/lib
目錄是否包含所需依賴的JAR包;驗證web.xml
中servlet-class
配置的正確性。。
配置文件錯誤:
日志特征:SEVERE: Parse error in application web.xml file
或org.xml.sax.SAXParseException
。
解決方法:檢查conf/server.xml
、webapps/<應用名>/WEB-INF/web.xml
等配置文件的語法(如標簽閉合、屬性值格式),可使用XML驗證工具輔助檢查。。
對于大型或復雜的日志文件,手動分析效率低下,可使用以下工具:
/etc/logrotate.d/tomcat
文件,配置輪轉策略(如每天輪轉1次,保留7天):/usr/local/tomcat/logs/catalina.out {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
```。
若日志信息過多干擾排查,可通過修改logging.properties
文件調整日志級別,減少無關日志輸出:
# 打開$CATALINA_HOME/conf/logging.properties文件
vi $CATALINA_HOME/conf/logging.properties
將需要關注的logger級別調整為WARNING
或ERROR
(級別從低到高:FINEST→FINER→FINE→CONFIG→INFO→WARNING→SEVERE):
org.apache.catalina.level = WARNING # 降低Tomcat核心組件的日志級別
com.example.myapp.level = ERROR # 將特定應用的日志級別設為ERROR
修改后重啟Tomcat使配置生效:
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
```。