分析Ubuntu Tomcat日志以提升稳定性
导读:Ubuntu Tomcat 日志分析与稳定性提升 一 日志全景与定位 关键日志与用途 catalina.out:标准输出与错误输出,包含启动、关闭与未捕获异常,是首要排查文件。 localhost..log:应用部署与上下文初始化日志,...
Ubuntu Tomcat 日志分析与稳定性提升
一 日志全景与定位
- 关键日志与用途
- catalina.out:标准输出与错误输出,包含启动、关闭与未捕获异常,是首要排查文件。
- localhost..log:应用部署与上下文初始化日志,定位应用级错误。
- localhost_access_log..txt:访问日志,分析HTTP状态码分布、慢请求、热点接口。
- manager..log:管理应用相关日志(如部署/回滚)。
- 快速定位与实时查看
- 查看进程与端口:ps -ef | grep tomcat;ss -tunlp | grep 8080
- 实时跟踪:tail -f $CATALINA_HOME/logs/catalina.out
- 关键字检索:grep -i “error|exception|fail” $CATALINA_HOME/logs/catalina.out
- 访问日志统计示例:awk ‘{ print $9} ’ $CATALINA_HOME/logs/localhost_access_log.*.txt | sort | uniq -c | sort -nr | head
- 建议将日志统一到**/var/log/tomcat/**,便于集中管理与权限控制。
二 日志配置与轮转
- 访问日志 AccessLogValve(server.xml)
- 作用:记录请求行、状态码、耗时等,便于定位4xx/5xx与性能瓶颈。
- 建议:生产环境开启,按需精简字段,避免磁盘压力。
- 日志级别(conf/logging.properties)
- 原则:生产以WARN/ERROR为主,必要时对特定包临时调为DEBUG定位问题,事后恢复。
- 日志轮转与清理
- 使用logrotate管理 catalina.out 与访问日志,按日轮转、压缩、保留7–30天。
- 示例(/etc/logrotate.d/tomcat):
- /var/log/tomcat/catalina.out {
- daily
- rotate 7
- compress
- missingok
- notifempty
- copytruncate
- }
- /var/log/tomcat/catalina.out {
- 集中化与可视化
- 小规模可用ELK/Graylog或Systemd Journal + journalctl做集中采集与检索,便于告警与审计。
三 稳定性问题从日志出发的排查路径
- 启动失败
- 关键词:SEVERE、LifecycleBase、BindException
- 典型:端口被占用(Address already in use)、JVM 内存不足(Could not reserve enough space for object heap)、JAVA_HOME 未定义
- 处置:ss -tunlp | grep 8080 查占用并释放;调整 JAVA_OPTS=“-Xms512m -Xmx1024m”;export JAVA_HOME。
- 运行期异常
- 关键词:OutOfMemoryError、SQLException/Connection refused、ClassNotFoundException/NoSuchMethodError
- 处置:OOM 调整堆与元空间;数据库连接失败检查URL/账号/网络/白名单;类冲突清理重复 JAR。
- 访问异常与性能劣化
- 访问日志统计 5xx/4xx、慢请求(响应时间异常)、热点接口;结合 CPU/内存/IO 监控定位瓶颈。
四 用日志驱动的性能与线程池优化
- 从访问日志发现瓶颈
- 统计状态码与 URL:awk ‘{ print $9, $7} ’ access_log | sort | uniq -c | sort -nr
- 识别长尾请求与错误突发,结合业务高峰时段做容量规划。
- 线程池与连接器调优(server.xml)
- 关键参数:maxThreads、minSpareThreads、acceptCount、connectionTimeout、keepAliveTimeout、maxKeepAliveRequests
- 方法:基于日志中“排队/超时/线程耗尽”线索,逐步调大 maxThreads 与 acceptCount,并控制连接超时与 Keep-Alive,避免资源争用。
- 示例(示意)
- <
Connector port=“8080” protocol=“HTTP/1.1”
- maxThreads=“300” minSpareThreads=“50”
- acceptCount=“100”
- connectionTimeout=“20000”
- keepAliveTimeout=“10000” maxKeepAliveRequests=“1000” />
- <
Connector port=“8080” protocol=“HTTP/1.1”
- 建议:每次只调整一个变量,用至少一个业务高峰周期的日志与监控验证效果。
五 可落地的日常巡检与告警清单
- 每日巡检
- 错误与异常计数:grep -i “error|exception|fail” catalina.out | wc -l
- 5xx 比例与 Top URL:awk ‘$9> =500 { print $7} ’ access_log | sort | uniq -c | sort -nr | head
- 磁盘与日志体积:du -sh /var/log/tomcat;确保轮转生效。
- 每周巡检
- 线程与连接:结合日志与监控查看线程池使用率、连接池等待/超时。
- 依赖与版本:排查冲突 JAR、JDK 与 Tomcat 兼容性(如 Tomcat 10 需 JDK 11+)。
- 告警规则建议
- 5xx 比例、ERROR 数量、磁盘使用率超过阈值、访问日志停止滚动、端口未监听、GC 时间/次数异常(需开启 GC 日志)。
- 变更与回滚
- 任何配置(线程池、JVM、日志级别)变更前备份;变更后在固定窗口观察日志与指标,异常即回滚。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 分析Ubuntu Tomcat日志以提升稳定性
本文地址: https://pptw.com/jishu/749767.html
