一、定期监控关键日志文件,识别宕机潜在诱因
Tomcat的核心日志文件(如catalina.out、localhost.date.log、manager.log)记录了启动/停止状态、运行时错误及应用层异常,是预防宕机的“预警雷达”。通过以下命令实时监控关键信息:
tail -f $TOMCAT_HOME/logs/catalina.out,可动态跟踪Tomcat运行状态,及时发现崩溃前的异常提示(如内存溢出、线程死锁);tail -f catalina.out | grep -i "error"或grep "SEVERE" catalina.out,快速定位ERROR、SEVERE级别的日志,这些日志通常包含导致宕机的直接原因(如数据库连接失败、Servlet异常);sed -n '/2025-10-16 22:00/,/2025-10-17 06:00/' catalina.out截取对应时间段日志,聚焦问题高发期。二、优化日志级别,减少无关信息干扰
过度详细的日志(如INFO级别)会增加日志体积,掩盖关键错误。通过调整logging.properties文件(位于$TOMCAT_HOME/conf目录),将日志级别设置为WARNING或更高,聚焦可能引发宕机的问题:
org.apache.catalina.level = INFO,修改为org.apache.catalina.level = WARNING,减少不必要的启动、请求处理日志;java.sql.level = WARNING、org.apache.jasper.level = WARNING),避免无关日志淹没关键错误;./shutdown.sh && ./startup.sh),使配置变更生效。三、配置日志轮转,防止日志文件膨胀
未轮转的catalina.out文件会无限增长(可达GB级别),占用全部磁盘空间,导致Tomcat因无法写入日志而崩溃。通过以下方式实现自动轮转:
/etc/logrotate.d/tomcat文件,添加以下配置(按日期轮转,保留30天日志,压缩旧日志):/opt/tomcat/logs/catalina.out {
daily
rotate 30
compress
missingok
notifempty
copytruncate
}
该配置会每天切割catalina.out为catalina.YYYY-MM-DD.out,保留30天内的日志,压缩旧日志以节省空间;catalina.out:编辑$TOMCAT_HOME/bin/catalina.sh,找到CATALINA_OUT="$CATALINA_BASE/logs/catalina.out",替换为CATALINA_OUT=/dev/null,将标准输出/错误重定向到空设备,彻底避免catalina.out膨胀。四、分析错误日志模式,提前修复隐患
通过定期分析日志中的高频错误,可提前修复潜在问题,避免宕机:
java.lang.OutOfMemoryError: Java heap space,需调整JVM内存参数(-Xms512m -Xmx1024m,根据服务器配置调整);java.sql.SQLException: Connection refused,需检查数据库服务是否正常、连接池配置(如maxActive)是否合理;java.lang.ThreadDeath或长时间无响应,需通过jstack生成线程转储(jstack -l <pid> > thread_dump.txt),分析死锁线程并优化代码;grep结合邮件工具(如mailx),当catalina.out中出现ERROR日志时发送报警(例如:grep -i "error" catalina.out | mail -s "Tomcat Error Alert" admin@example.com),及时通知运维人员处理。五、结合系统日志,全面排查系统级问题
Tomcat宕机可能由系统资源不足(内存、磁盘、CPU)或端口冲突引起,需结合系统日志(journalctl或/var/log/messages)综合分析:
journalctl -u tomcat.service -f(若Tomcat以systemd服务运行)或tail -f /var/log/messages,查看系统级错误(如OOM Killer杀死Tomcat进程、磁盘空间耗尽);top(查看CPU/内存使用率)、df -h(查看磁盘空间)、netstat -tuln | grep <port>(查看端口占用),及时发现资源瓶颈(如内存占用超过80%需扩容)。