温馨提示×

CentOS系统中Tomcat的故障排查步骤

小樊
41
2025-10-19 18:37:39
栏目: 智能运维

CentOS系统中Tomcat故障排查步骤

1. 查看Tomcat日志文件

Tomcat的日志是故障排查的核心依据,其中catalina.out(主日志,记录启动/运行全过程)、localhost.log(应用部署日志)、localhost_access_log.*.txt(访问日志)是最关键的文件。

  • 使用tail -f $TOMCAT_HOME/logs/catalina.out实时查看最新日志(适用于启动失败或运行中报错);
  • 若日志未生成或为空,需检查$TOMCAT_HOME/logs目录权限(确保Tomcat用户有写入权限),或手动运行$CATALINA_HOME/bin/startup.sh观察终端输出。

2. 检查Java环境配置

Tomcat依赖JDK运行,需确保以下配置正确:

  • 验证Java版本:运行java -version,确认安装的JDK版本与Tomcat兼容(如Tomcat 9需JDK 8+,Tomcat 10需JDK 11+);
  • 检查JAVA_HOME环境变量:运行echo $JAVA_HOME,确认变量指向JDK安装目录(如/usr/lib/jvm/java-11-openjdk);若未设置,需在/etc/profile~/.bashrc中添加:
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
    export PATH=$JAVA_HOME/bin:$PATH
    
    然后执行source /etc/profile使配置生效。

3. 排查端口冲突

Tomcat默认使用8080(HTTP)8005(Shutdown)、**8009(AJP)**端口,若这些端口被其他进程占用,会导致启动失败。

  • 使用netstat -tuln | grep 端口号(如netstat -tuln | grep 8080)或ss -tunlp | grep java查看端口占用情况;
  • 若端口被占用,可通过以下方式解决:
    • 终止占用进程:kill -9 <PID>(PID为lsof -i :8080输出的进程ID);
    • 修改Tomcat端口:编辑$CATALINA_HOME/conf/server.xml,找到<Connector port="8080">标签,将端口号改为未被占用的值(如8081),保存后重启Tomcat。

4. 验证Tomcat配置文件

Tomcat的核心配置文件(如server.xmlweb.xml)若存在语法错误或配置不当,会导致启动失败。

  • 检查server.xml:重点核查<Connector>标签的端口、协议(如protocol="HTTP/1.1")、redirectPort(如redirectPort="8443")配置;
  • 检查web.xml:确认应用部署描述符中的<servlet><filter>配置是否正确;
  • 若配置文件有修改,建议使用xmllint --noout $CATALINA_HOME/conf/server.xml验证XML语法。

5. 检查系统资源是否充足

系统资源不足(如内存、磁盘空间)会导致Tomcat无法启动或运行缓慢。

  • 查看内存使用:运行free -m,确认系统剩余内存(建议预留1GB以上给Tomcat);
  • 查看磁盘空间:运行df -h,确认/分区剩余空间(建议保留10%以上);
  • 查看CPU负载:运行top,确认CPU使用率(若长期超过80%,需优化应用或升级硬件)。
  • 若内存不足,可调整Tomcat内存参数(见6. 调整Tomcat内存设置)。

6. 调整Tomcat内存设置

若出现java.lang.OutOfMemoryError: Java heap space(堆内存溢出)或java.lang.OutOfMemoryError: PermGen space(永久代溢出)错误,需调整JVM内存参数。

  • 编辑$CATALINA_HOME/bin/catalina.sh(Linux)或catalina.bat(Windows),在文件开头添加以下内容(根据服务器配置调整数值):
    JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:MaxMetaspaceSize=256m"
    
    其中:
    • -Xms:初始堆内存(如512MB);
    • -Xmx:最大堆内存(如1024MB);
    • -XX:MaxPermSize:永久代最大大小(适用于Tomcat 8及以下,Tomcat 9及以上需用-XX:MaxMetaspaceSize);
    • -XX:MaxMetaspaceSize:元空间最大大小(Tomcat 9+)。
  • 保存后重启Tomcat使配置生效。

7. 检查SELinux状态

CentOS默认启用SELinux,可能会阻止Tomcat访问文件或端口。

  • 查看SELinux状态:运行sestatus,若显示Enforcing(启用),需临时禁用(测试用):sudo setenforce 0
  • 若禁用后Tomcat正常运行,可永久禁用SELinux(需谨慎):编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后重启服务器。

8. 检查防火墙设置

CentOS防火墙(firewalld)可能会阻止Tomcat的端口访问。

  • 查看防火墙规则:运行sudo firewall-cmd --list-all,确认是否放行Tomcat端口(如8080);
  • 若未放行,添加端口规则:sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent,然后重新加载防火墙:sudo firewall-cmd --reload

9. 验证Tomcat进程状态

确认Tomcat是否已成功启动:

  • 使用ps aux | grep tomcat查看Tomcat进程(若存在org.apache.catalina.startup.Bootstrap进程,说明已启动);
  • 若进程不存在,尝试手动启动:$CATALINA_HOME/bin/startup.sh,观察终端输出是否有错误信息。

10. 检查应用部署问题

若Tomcat启动后无法访问应用(如404 Not Found或应用无法加载),需检查应用部署情况:

  • 查看$CATALINA_HOME/webapps目录,确认应用WAR包或目录是否存在;
  • 查看logs/localhost.log,确认应用部署是否有错误(如SEVERE [main] org.apache.catalina.startup.HostConfig.deployDirectory Error deploying web application directory);
  • 若应用有问题,可删除webapps目录下所有内容,重新部署应用。

0