1. 查看Tomcat日志文件
Tomcat的日志是排查故障的核心依据,重点检查以下文件:
tail -f $CATALINA_HOME/logs/catalina.out
若日志未生成或权限不足,需检查logs目录的写入权限(chmod -R 755 $CATALINA_HOME/logs)或日志配置(logging.properties)。
2. 检查端口占用情况
Tomcat默认使用8080(HTTP)、8005(Shutdown)、**8009(AJP)**端口,若这些端口被其他进程占用,会导致Tomcat无法启动。
使用以下命令检查端口占用:
sudo netstat -tulnp | grep ':8080\b' # 查看8080端口占用进程
sudo lsof -i :8080 # 更直观显示占用进程的PID和名称
若端口被占用,可选择:
kill -9 <PID>);$CATALINA_HOME/conf/server.xml),调整<Connector>标签的port属性(如将8080改为8081)。3. 验证Java环境配置
Tomcat依赖JDK运行,需确保以下配置正确:
JAVA_HOME指向JDK安装目录(如/usr/lib/jvm/java-11-openjdk-amd64),并在$CATALINA_HOME/bin/setenv.sh(若不存在则创建)中设置:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
使用以下命令验证Java环境:
java -version # 查看Java版本
javac -version # 查看Javac版本(确认JDK安装)
echo $JAVA_HOME # 查看JAVA_HOME变量
若Java版本不兼容或环境变量未设置,需安装对应JDK并修正配置。
4. 检查Tomcat配置文件语法
Tomcat的核心配置文件(server.xml、context.xml、web.xml)若存在语法错误,会导致启动失败。
<Connector>、<Host>、<Context>标签的属性(如port、path、docBase);reloadable、crossContext);xmllint)检查语法:xmllint --noout $CATALINA_HOME/conf/server.xml
若配置文件有误,需修正后重启Tomcat。
5. 确认Tomcat进程状态
使用以下命令检查Tomcat是否正在运行:
ps -ef | grep tomcat # 查看Tomcat进程
pgrep -f tomcat # 快速获取Tomcat进程ID
若进程不存在,说明Tomcat未启动,需执行$CATALINA_HOME/bin/startup.sh启动;若进程存在但无法访问,可能是端口未监听或防火墙拦截。
6. 检查系统资源限制
系统资源不足(如内存、磁盘空间、文件句柄)会导致Tomcat启动失败或运行异常:
free -m查看内存使用情况,若剩余内存不足,需调整Tomcat内存参数($CATALINA_HOME/bin/catalina.sh中设置JAVA_OPTS):export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m"
df -h查看磁盘空间,若/分区剩余空间不足,需清理日志、临时文件或应用数据;ulimit -n查看当前用户的文件句柄限制,若过小(如1024),需修改/etc/security/limits.conf(添加tomcat soft nofile 65535、tomcat hard nofile 65535)。7. 排查应用部署问题
部署的应用若存在错误(如WAR包损坏、类冲突、数据库连接失败),会导致Tomcat启动失败或应用无法访问:
unzip -t your-app.war验证);$CATALINA_HOME/logs/localhost.<date>.log中记录了应用部署的详细错误(如SEVERE: Error deploying web application directory);webapps目录下的对应WAR包或目录移除,重启Tomcat后再重新部署。8. 检查SELinux(仅限RHEL/CentOS)
SELinux可能会阻止Tomcat访问网络端口或文件,导致启动失败。
sudo setenforce 0
/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启服务器生效。sudo semanage port -a -t http_port_t -p tcp 8080 # 允许Tomcat使用8080端口
```。