温馨提示×

如何利用日志进行Debian Tomcat故障排查

小樊
38
2025-12-30 03:53:58
栏目: 智能运维

Debian Tomcat故障排查的日志实战指南

一 定位日志与快速查看

  • 确认日志目录:Debian常见路径为**/var/log/tomcatX/(X为版本号,如tomcat9**),自定义安装可能在**/opt/tomcat/logs/**。可通过查看进程环境变量快速确认:ps aux | grep tomcatsudo systemctl show tomcatX | grep -i catalina
  • 核心日志与作用:
    • catalina.out:标准输出与错误输出,覆盖启动、运行、停止的关键信息。
    • localhost..log:本地主机与应用部署相关事件(含部署异常堆栈)。
    • manager..log / host-manager..log:管理应用的操作日志。
    • 访问日志:由 AccessLogValve 写入,常见文件前缀为 localhost_access_log
  • 快速查看命令:
    • 实时跟踪:sudo tail -f /var/log/tomcatX/catalina.out
    • 按时间筛选:grep “2025-10-09” /var/log/tomcatX/catalina.out | grep “ERROR”
    • 统计错误数:grep “ERROR” /var/log/tomcatX/catalina.out | wc -l
    • 端口占用检查:sudo lsof -i:8080ss -ltnp | grep 8080
    • 服务状态与重启:sudo systemctl status tomcatXsudo systemctl restart tomcatX
      以上路径、文件与作用、常用命令适用于Debian上各主流Tomcat版本。

二 日志过滤与关键信息解读

  • 关键字筛选:
    • 错误级别:grep -E “SEVERE|WARNING|ERROR” catalina.out
    • 内存溢出:grep “OutOfMemoryError” catalina.out
    • 类缺失:grep “ClassNotFoundException” catalina.out
    • 数据库连接:grep -i “JDBC|SQLException” localhost..log
  • 读懂日志要素:关注时间戳日志级别类名/线程异常堆栈Caused by,从首次异常向上追溯其“根因”。
  • 访问日志定位HTTP问题:在 conf/server.xml 中启用并配置 AccessLogValve,通过 pattern 记录客户端IP、请求、状态码、Referer、UA等,便于分析4xx/5xx。示例:
    • 启用与常用格式:
      • pattern=common:%h %l %u %t “%r” %s %b
      • pattern=combined:在 common 基础上增加 %{Referer}i%{User-Agent}i
    • 保留策略:设置 rotatable=“true” maxDays=“30” 控制归档与保留天数。
  • 日志级别体系:JUL 提供 SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST,可按需提升特定包的日志级别以获取更细粒度信息。

三 常见故障的日志特征与处置

  • 端口冲突:日志出现 SEVERE: Error starting Tomcat. Port 8080 already in use。处置:用 lsof -i:8080ss -ltnp | grep 8080 查占用PID并释放,或在 conf/server.xml 调整端口。
  • 内存不足:出现 java.lang.OutOfMemoryError: Java heap space。处置:在 /etc/default/tomcatX 中调整 JAVA_OPTS(如 -Xms512m -Xmx2048m),重启生效。
  • 类加载失败:出现 ClassNotFoundException。处置:确认依赖在 WEB-INF/lib$CATALINA_HOME/lib,检查构建与部署是否完整。
  • JDBC/数据库问题:出现 Cannot create JDBC driver 或连接超时。处置:驱动JAR放入 lib,核对 context.xml/web.xml 中的 URL/用户名/密码,并确认数据库可达。
  • HTTP 404/500:访问日志中 404 多为路径错误或应用未部署;500 多伴随 localhost..log 的异常堆栈,按堆栈修复应用代码或配置。

四 提升日志可观测性与维护

  • 动态调级:编辑 conf/logging.properties,为容器、连接器、认证、应用包设定级别。示例:
    • 全局:.level=INFO(生产建议),开发可调为 FINE
    • 组件:
      • org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level=FINE(部署细节)
      • org.apache.catalina.authenticator.level=WARNING
      • org.apache.coyote.level=WARNING
    • 应用包:com.yourapp.level=DEBUG(按需开启)。
  • 异步日志(Tomcat 8+):用 AsyncFileHandler 降低日志IO对业务线程影响。示例:
    • handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
    • 1catalina.org.apache.juli.AsyncFileHandler.level = INFO
    • 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
    • 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
    • 1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
  • 访问日志精细化:在 server.xml 中配置 AccessLogValve,选择合适的 patternmaxDays,便于审计与容量规划。
  • 日志轮转:使用 logrotate 管理 catalina.out 与访问日志,避免磁盘被撑满。示例(/etc/logrotate.d/tomcatX):
    • /var/log/tomcatX/catalina.out {
      • daily; rotate 7; compress; missingok; notifempty; copytruncate
    • }
  • 变更生效:修改 logging.propertiesserver.xml 后需重启:sudo systemctl restart tomcatX

0