Tomcat的日志文件是排查启动失败的关键,主要日志文件位于$CATALINA_HOME/logs目录下($CATALINA_HOME为Tomcat安装目录),包括:
查看方法:
tail -f $CATALINA_HOME/logs/catalina.out(按Ctrl+C退出);tail -f catalina.out | grep -i "error\|fail"(快速定位错误关键词);sed -n '/2025-10-24 10:00/,/2025-10-24 10:05/p' catalina.out(替换为实际时间范围)。Tomcat依赖Java环境运行,需确保以下两点:
java -version,若未安装或版本不符合要求(Tomcat 10需Java 11+,Tomcat 9需Java 8+),需通过yum install java-11-openjdk-devel(CentOS默认仓库)安装对应版本;JAVA_HOME是否指向JDK安装目录(如/usr/lib/jvm/java-11-openjdk),可通过echo $JAVA_HOME验证;若未设置,将以下内容添加到~/.bashrc或/etc/profile中:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
执行source ~/.bashrc使配置生效。Tomcat默认使用8080端口(HTTP)、8005端口(关闭命令)、8009端口(AJP),若这些端口被其他进程占用,会导致启动失败。
netstat -tuln | grep ':8080\b'(\b确保匹配完整端口);kill -9 <PID>终止进程;$CATALINA_HOME/conf/server.xml,找到<Connector port="8080">标签,将8080改为未被占用的端口(如8081),保存后重启Tomcat。Tomcat的主配置文件server.xml(位于conf目录)若存在语法错误,会导致启动失败。
configtest工具,执行$CATALINA_HOME/bin/catalina.sh configtest,若输出Syntax OK则表示配置正确;若有错误,根据提示定位server.xml中的问题(如标签未闭合、属性值错误)。Tomcat需要对安装目录及子目录有读写执行权限,否则会因无法访问文件而启动失败。
tomcat用户(若未创建,需先useradd tomcat),执行sudo chown -R tomcat:tomcat $CATALINA_HOME;sudo chmod -R 755 $CATALINA_HOME;logs目录可写入,执行sudo chmod -R 775 $CATALINA_HOME/logs。CentOS默认启用SELinux(安全增强模块),可能阻止Tomcat访问网络或文件。
sudo setenforce 0(立即生效,重启后恢复);/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启系统生效;sudo setsebool -P tomcat_can_network_connect 1。Tomcat启动需要足够的内存、磁盘空间,资源不足会导致启动失败。
free -m,确保可用内存不低于Tomcat配置的-Xms(初始堆大小,默认128MB)和-Xmx(最大堆大小,默认512MB);若内存不足,可编辑$CATALINA_HOME/bin/setenv.sh(若不存在则创建),添加:export JAVA_OPTS="-Xms512m -Xmx1024m"
df -h,确保/分区剩余空间不低于1GB(建议至少5GB)。CentOS的firewalld默认会阻止外部访问Tomcat端口,需添加规则放行。
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent(8080为Tomcat端口,若修改过需替换);sudo firewall-cmd --reload;sudo firewall-cmd --zone=public --query-port=8080/tcp(返回yes表示放行成功)。若Tomcat启动时加载的应用程序(如webapps目录下的WAR文件)存在错误,会导致启动失败。
webapps目录下的非必要应用(如ROOT.war外的应用)移至其他目录,仅保留Tomcat自带应用;lib目录下有对应的依赖库;logs/localhost.<date>.log,获取应用部署的具体错误信息。按照以上步骤逐一排查,通常可解决大部分CentOS下Tomcat启动失败的问题。若仍无法解决,建议根据日志中的具体错误信息(如ClassNotFoundException、Port already in use)进一步搜索针对性解决方案。