1. 定位并分类Tomcat日志文件
在Ubuntu系统中,Tomcat日志默认存储在/var/log/tomcat(或自定义安装路径下的logs目录),核心日志文件包括:
catalina.out用于系统级故障,localhost_access_log用于流量异常分析)。2. 实时监控关键日志,捕捉异常信号
使用命令行工具实时跟踪日志输出,及时发现错误迹象:
tail -f /var/log/tomcat/catalina.out(按Ctrl+C退出),可快速捕获新产生的错误信息;grep -i 'error\|exception\|failed' /var/log/tomcat/catalina.out(-i忽略大小写),聚焦ERROR、WARN级别的日志条目;sed -n '/2025-11-01 00:00:00/,/2025-11-01 23:59:59/p' /var/log/tomcat/catalina.out,分析特定时段的故障(如夜间流量高峰时的异常)。3. 分析日志中的关键错误信息
重点解读日志中的错误等级、时间戳、异常类型和堆栈跟踪,快速定位问题根源:
ERROR(致命错误,如服务崩溃)和WARN(潜在风险,如内存不足警告);java.lang.OutOfMemoryError(内存泄漏或堆内存不足)、java.sql.SQLException(数据库连接失败)、java.lang.NullPointerException(代码空指针);at com.example.MyServlet.doGet(MyServlet.java:25)),定位具体代码位置或第三方库问题。4. 配置日志轮转与压缩,避免日志膨胀
使用logrotate工具定期分割、压缩日志文件,防止日志过大占用磁盘空间(导致系统无法写入日志或崩溃):
/etc/logrotate.d/tomcat配置文件,添加以下内容:/var/log/tomcat/*.log {
daily # 按天轮转
rotate 7 # 保留最近7份日志
compress # 压缩旧日志(如.gz格式)
delaycompress # 延迟压缩(避免当天日志被压缩)
missingok # 忽略缺失的日志文件
notifempty # 空日志不轮转
copytruncate # 复制日志后清空原文件(避免重启Tomcat)
}
logrotate -vf /etc/logrotate.d/tomcat(-v显示详细过程,-f强制轮转)。5. 使用日志分析工具,实现深度监控与预警
借助专业工具提升日志分析效率,实现可视化和自动化预警:
OutOfMemoryError则发送邮件”);6. 结合JMX监控,补充日志的实时性能数据
JMX(Java Management Extensions)提供Tomcat运行时的详细性能指标,与日志分析结合可更全面地预防宕机:
tomcat/bin/catalina.sh,在JAVA_OPTS中添加:JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=<服务器IP> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
重启Tomcat使配置生效;jconsole(Java自带,命令:jconsole)、VisualVM(sudo apt-get install visualvm)或Prometheus的JMX Exporter,监控线程池状态(如活跃线程数超过最大线程数的80%)、内存使用(如堆内存使用率超过阈值)、GC频率(如频繁Full GC)等指标,及时调整配置(如增加线程池大小、扩容堆内存)。7. 自动化日志清理与分析脚本
编写Shell脚本自动化完成日志清理、错误统计等任务,减少人工干预:
clean_tomcat_logs.sh):#!/bin/bash
LOG_DIR="/var/log/tomcat"
find "$LOG_DIR" -name "*.log.*" -mtime +7 -exec rm -f {} \; # 删除7天前的分割日志
find "$LOG_DIR" -name "*.gz" -mtime +30 -exec rm -f {} \; # 删除30天前的压缩日志
添加执行权限:chmod +x clean_tomcat_logs.sh,通过cron每天定时运行(如0 2 * * * /path/to/clean_tomcat_logs.sh);count_errors.sh):#!/bin/bash
LOG_FILE="/var/log/tomcat/catalina.out"
echo "最近24小时的ERROR数量:" >> /var/log/tomcat/error_stats.log
grep -i 'error' "$LOG_FILE" | grep "$(date -d '1 day ago' '+%b %d')" | wc -l >> /var/log/tomcat/error_stats.log
统计每日错误数量,便于发现错误增长趋势(如某天错误数突然增加,需立即排查)。