温馨提示×

Tomcat在CentOS上的故障排查指南

小樊
32
2025-12-07 15:35:21
栏目: 智能运维

Tomcat 在 CentOS 上的故障排查指南

一 快速判定与定位路径

  • 确认进程与服务状态:查看是否有 Java 进程包含 org.apache.catalina.startup.Bootstrap;如使用 systemd,执行 systemctl status tomcat。若无进程或状态异常,优先查看日志。
  • 查看关键日志:进入 $CATALINA_HOME/logs,实时跟踪 catalina.outlocalhost.loglocalhost_access_log.*.txt,从时间戳最早的报错入手。
  • 核对监听端口:确认 server.xml 配置,检查实际监听 ss -tunlp | grep javanetstat -tunlp | grep java
  • 本地连通性自检:在服务器内执行 curl -I http://localhost:8080,正常应返回 HTTP/1.1 200302
  • 外部访问受阻:核对 firewalld/SELinux 与云上安全组是否放行 8080/tcp
  • 环境与版本:执行 java -version 确认 JDK 已安装且与 Tomcat 版本匹配(如 Tomcat 10.x → Java 11+Tomcat 9.x → Java 8+)。
  • 文件权限:确保 $CATALINA_HOME 归属运行用户(如 tomcat:tomcat)。

二 常见故障与修复对照表

现象 快速检查 修复建议
启动即退出或 catalina.out 报端口冲突 grep -A5 “<Connector” server.xml;ss -tunlp | grep 8080;lsof -i:8080 释放占用进程(kill),或调整 server.xml 的端口
本地可访问,外部访问超时/拒绝 firewall-cmd --list-all;ip addr;云安全组 放行端口:firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload;检查安全组
catalina.out 报 Address already in use 同上 同上
catalina.out 报 OutOfMemoryError 查看日志 OOM 类型与时间点 调整 JAVA_OPTS(见下节),分析堆/元空间泄漏
启动失败且无明显日志 df -h;du -sh $CATALINA_HOME/logs 清理旧日志或扩容磁盘,再重启
页面 404/403 ls $CATALINA_HOME/webapps;检查 ROOT/WAR;tomcat-users.xml 部署 WAR/ROOT;按需配置 manager 用户与角色
启动缓慢(虚拟机常见) dmesg/系统熵值低迹象 安装 haveged 提升熵池:yum install -y haveged && systemctl enable --now haveged
部署失败或 WAR 解压异常 查看 localhost.log 部署报错;检查 WAR 完整性 重新打包/上传;排查磁盘空间与权限

三 关键操作命令清单

  • 进程与端口
    • 查看进程:ps -aux | grep tomcat;systemctl status tomcat
    • 端口占用:ss -tunlp | grep java;lsof -i:8080;netstat -tunlp | grep 8080
    • 释放端口:kill -9 (谨慎,先确认业务影响)
  • 日志与配置
    • 实时看日志:tail -f $CATALINA_HOME/logs/catalina.out
    • 配置端口:grep -A5 “<Connector port” $CATALINA_HOME/conf/server.xml
  • 防火墙与 SELinux
    • 放行端口:firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload
    • SELinux 排查:setenforce 0(仅测试);永久策略见 /etc/selinux/config
  • 环境与健康
    • Java 版本:java -version
    • 磁盘空间:df -h;du -sh $CATALINA_HOME/logs
  • 权限
    • 修正归属:chown -R tomcat:tomcat $CATALINA_HOME

四 内存与性能问题处理

  • 常见 OOM 类型与含义
    • Java heap space:堆内存不足,常见于大对象/内存泄漏/一次性加载大数据。
    • Metaspace:类元数据空间不足,常见于应用大量类加载或热部署频繁。
    • 老版本 PermGen:Java 7 及更早的永久代问题。
  • 调整 JVM 参数(示例,写入 bin/catalina.sh 的 JAVA_OPTS)
    • 堆与元空间:JAVA_OPTS=“-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m”
    • 老版本示例:JAVA_OPTS=“-Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=512m”
  • 分析与验证
    • 结合日志定位触发 OOM 的请求/线程,必要时做堆转储分析(谨慎,生产慎用)。
    • 观察重启后内存曲线与 GC 行为,确认参数有效。

五 环境与权限检查要点

  • Java 与 Tomcat 版本匹配
    • Tomcat 10.x → Java 11+
    • Tomcat 9.x → Java 8+
  • JAVA_HOME 与 PATH
    • 验证:java -version;which java
    • 如以服务方式启动仍报找不到 Java,需在 ~/.bashrc~/.bash_profile 中显式导出 JAVA_HOMEPATH(CentOS 常用做法)。
  • 文件与目录权限
    • 建议以专用用户(如 tomcat)运行:chown -R tomcat:tomcat $CATALINA_HOME
  • 服务路径与部署包
    • 确认 $CATALINA_HOME 与服务脚本路径一致;WAR 包完整且可解压。

0