温馨提示×

Debian Tomcat故障排查技巧

小樊
44
2025-12-21 19:48:08
栏目: 智能运维

Debian 上 Tomcat 故障排查技巧

一 快速定位与通用流程

  • 查看服务状态与系统日志:使用 systemctl status tomcat9journalctl -xe 获取启动失败的直接线索与系统级报错。
  • 定位并实时跟踪日志:Tomcat 日志通常在 /var/log/tomcat9/$CATALINA_HOME/logs/,优先查看 catalina.out,配合 tail -fgrep “ERROR|SEVERE|WARNING” 快速筛选关键信息。
  • 检查端口占用:用 ss -tulpen | grep 8080netstat -tuln | grep 8080 确认 8080/8005/8009 是否被占用;若冲突,结束占用进程或修改 conf/server.xml 中的 Connector port
  • 校验关键配置:检查 server.xml(端口、协议、线程与超时)、web.xml(应用配置)、以及访问日志 AccessLogValvedirectory/prefix 是否指向可写目录。
  • 确认 Java 与权限:执行 java -version,确保 JAVA_HOME 指向 JDK;检查 tomcat 用户对 conf/、logs/、webapps/ 的读写权限。
  • 重启并复测:修正后执行 systemctl restart tomcat9 并再次观察日志与端口状态。

二 常见故障与对应处理

症状 快速检查 处理要点
端口被占用无法启动 ss/netstat 查 8080/8005/8009 结束占用进程或改 server.xmlConnector port
JAVA_HOME 或 JDK 不匹配 java -version;核对版本要求 安装合适 JDK,正确设置 JAVA_HOME
server.xml 配置错误 启动日志报解析错误 校验标签闭合、端口与路径;必要时回滚
权限不足导致无法写日志/部署 查看 logs/ 与 work/ 权限 tomcat 用户运行,修正目录属主/权限
内存不足或频繁 Full GC 日志出现 OutOfMemoryError;jstat 观察 调整 JAVA_OPTS(如 -Xms/-Xmx),分析并优化内存使用
部署失败 catalina.out/localhost 报部署异常 检查 web.xml、依赖 WEB-INF/lib、MANIFEST.MF 与上下文配置
访问异常(404/500) 访问日志与 localhost 日志 核对应用上下文路径、过滤器/监听器异常、静态资源映射

以上要点对应的命令与配置位置可参考:日志与端口检查、配置文件校验、JDK 与权限确认、内存与部署问题处理等实践。

三 日志分析与性能瓶颈定位

  • 访问与错误日志分析:在 catalina.outlocalhost.yyyy-MM-dd.log 中检索 ERROR/SEVERE,结合访问日志统计 HTTP 状态码分布、请求耗时,定位异常高发接口与时段。
  • GC 与内存:启用 GC 日志(如 -Xloggc-XX:+PrintGCDetails-XX:+PrintGCDateStamps),用 jstat -gc 观察 YGC/FGC 频率与停顿;必要时用 jmap -heap 查看堆配置与使用,生成 heap dump 深入分析。
  • 线程与锁:用 jstack 获取线程转储,排查 BLOCKED/长时间运行线程 与潜在死锁。
  • 系统资源:结合 top/htop、vmstat、iostat 观察 CPU、内存、I/O 瓶颈;配合 ss 检查连接状态与队列。
  • 数据库与应用:核对 连接池 配置(最大连接、超时、泄漏);必要时引入 APM(如 New Relic/Datadog)做调用链与热点定位。

四 配置与维护要点

  • 日志级别与输出:在 conf/logging.properties 合理设置日志级别(生产常用 INFO/WARN),避免 DEBUG/ALL 导致 I/O 膨胀;必要时开启 异步日志 降低业务线程阻塞。
  • 日志轮转与清理:配置 AccessLogValvedirectory/prefix,使用 logrotate/cronolog 定期归档与清理旧日志,防止磁盘占满。
  • JVM 与线程池:在 setenv.sh 或系统环境设置 JAVA_OPTS(如 -Xms512M -Xmx1024M),结合并发量调整 server.xmlmaxThreads/acceptCount 等参数。
  • 安全与自启动:确保以 tomcat 非特权用户运行;使用 systemctl enable tomcat9 配置开机自启,变更配置前先备份。

五 一键排查命令清单

  • 服务与系统日志:systemctl status tomcat9;journalctl -xe
  • 端口占用:ss -tulpen | grep 8080(或 netstat -tuln | grep 8080)
  • 进程与线程:ps -ef | grep tomcat;top/htop;jstack
  • 内存与 GC:jstat -gc ;jmap -heap ;生成 dump:jmap -dump:format=b,file=heap.hprof
  • 日志跟踪与筛选:tail -f /var/log/tomcat9/catalina.out;grep -i “ERROR|SEVERE” catalina.out

0