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日志,快速定位并解决常见问题,保障服务器稳定运行。