Linux環境下Tomcat日志分析指南
Tomcat的日志文件默認存儲在$CATALINA_HOME/logs
目錄($CATALINA_HOME
為Tomcat安裝根目錄),常見日志文件及作用如下:
使用tail -f
命令實時監控日志文件的新增內容(如查看catalina.out的最新日志):
tail -f /path/to/tomcat/logs/catalina.out
按Ctrl+C
停止監控。
grep
命令篩選包含“ERROR”的行(忽略大小寫可加-i
):grep -i "ERROR" /path/to/tomcat/logs/catalina.out
grep -E " 404 | 5[0-9]{2} " /path/to/tomcat/logs/access_log.2025-10-16.txt
sed
命令查看指定時間范圍的日志(如2025-10-16 14:00至14:30):sed -n '/2025-10-16 14:00:00/,/2025-10-16 14:30:00/p' /path/to/tomcat/logs/catalina.out
```。
使用awk
命令統計“ERROR”日志的總數:
awk '/ERROR/ {count++} END {print "Total ERRORs:", count}' /path/to/tomcat/logs/catalina.out
統計特定錯誤(如“NullPointerException”)的數量:
awk '/NullPointerException/ {count++} END {print "NullPointerException count:", count}' /path/to/tomcat/logs/catalina.out
grep "HTTP/1.1" /path/to/tomcat/logs/access_log.2025-10-16.txt | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
grep -A 10 "Exception" /path/to/tomcat/logs/catalina.out | grep -B 10 "at "
```(`-A 10`表示顯示匹配行后的10行,`-B 10`表示顯示匹配行前的10行)。
若訪問日志中包含響應時間(如第10列為響應時間,單位為毫秒),可計算平均響應時間:
awk '$10 ~ /^[0-9]+$/ {sum += $10; count++} END {print "Average response time:", sum/count "ms"}' /path/to/tomcat/logs/access_log.2025-10-16.txt
```。
### **四、日志管理與優化**
#### **1. 日志輪轉**
使用`logrotate`工具自動切割、壓縮、刪除舊日志(避免單個日志文件過大),編輯`/etc/logrotate.d/tomcat`文件(若不存在則創建),添加以下配置:
```bash
/path/to/tomcat/logs/*.log {
daily # 每天輪轉
missingok # 若日志文件不存在也不報錯
rotate 7 # 保留最近7天的日志
compress # 壓縮舊日志(如.gz格式)
notifempty # 若日志為空則不輪轉
create 640 tomcat tomcat # 創建新日志文件,權限640,所有者為tomcat用戶
sharedscripts # 所有日志輪轉完成后執行postrotate腳本
postrotate
/bin/kill -HUP `cat /path/to/tomcat/logs/catalina.pid 2>/dev/null` 2>/dev/null || true
endscript
}
手動觸發輪轉:
logrotate -f /etc/logrotate.d/tomcat
```。
#### **2. 日志亂碼解決**
若日志中出現中文亂碼,可在`catalina.sh`中添加JVM參數,設置文件編碼為UTF-8:
```bash
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
修改后重啟Tomcat使配置生效。
java.lang.OutOfMemoryError: Java heap space
(堆內存不足)或PermGen space
(永久代空間不足,Java 8及以上為Metaspace)。catalina.sh
中設置):export CATALINA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m" # Java 8及以下
export CATALINA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m" # Java 8及以上
根據服務器內存大小調整-Xms
(初始堆)和-Xmx
(最大堆)的值。Address already in use
(端口已被占用)。netstat
命令查找占用端口的進程,殺掉該進程或修改Tomcat端口:netstat -tulnp | grep 8080 # 查找8080端口的占用進程
kill -9 <PID> # 殺掉占用進程(替換<PID>為實際進程ID)
或修改conf/server.xml
中的<Connector>
端口(如將8080改為8081)。org.apache.catalina.LifecycleException: Failed to start component
(組件啟動失?。?,通常伴隨配置文件路徑或語法錯誤。server.xml
、web.xml
、context.xml
等配置文件的語法(如標簽閉合、屬性值正確性),確保引用的路徑(如docBase
)存在。通過以上步驟,可系統性地分析Tomcat日志,快速定位并解決常見問題,保障服務器穩定運行。