Tomcat的日志是排查启动失败的核心依据,主要关注logs/catalina.out(主日志文件,记录启动全过程)和logs/localhost.<日期>.log(本地主机相关事件)。使用以下命令实时查看日志输出或筛选错误信息:
tail -f /path/to/tomcat/logs/catalina.out # 实时跟踪日志
grep -i "ERROR" /path/to/tomcat/logs/catalina.out # 筛选错误信息
通过日志中的ERROR、Exception等关键词(如java.lang.OutOfMemoryError表示内存不足,Connection refused表示端口冲突),可快速定位问题根源。
Tomcat默认使用8080端口(HTTP)和8005端口(关闭命令),若这些端口被其他应用占用,会导致启动失败。
sudo netstat -tuln | grep 8080 # 查看8080端口占用
sudo lsof -i:8080 # 更详细的信息(包括进程ID)
conf/server.xml文件,找到<Connector port="8080">标签,将port值改为未被占用的端口(如8081),保存后重启Tomcat。Tomcat依赖Java运行时环境(JRE/JDK),Java环境配置错误(如JAVA_HOME未设置、版本不匹配)会导致启动失败。
java -version # 查看Java版本
which java # 查看Java安装路径
JAVA_HOME未设置,编辑/etc/profile(全局)或~/.bashrc(用户级)文件,添加以下内容(以JDK 11为例):export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 替换为实际JDK路径
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
保存后执行source /etc/profile(或source ~/.bashrc)使配置生效。Tomcat目录或文件的权限不足(如bin目录无执行权限、webapps目录不可写),会导致启动脚本无法执行或应用无法部署。
tomcat用户(或运行Tomcat的用户),并赋予适当权限:sudo chown -R tomcat:tomcat /path/to/tomcat # 修改所有者
sudo chmod -R 755 /path/to/tomcat # 赋予读写执行权限(谨慎使用777)
bin目录下的脚本(如startup.sh、shutdown.sh)有执行权限:sudo chmod +x /path/to/tomcat/bin/*.sh
若系统内存不足或Tomcat分配的内存过小,会抛出java.lang.OutOfMemoryError错误(如Java heap space表示堆内存不足)。
bin/catalina.sh文件,在#!/bin/sh行后添加以下内容(根据系统内存调整,如-Xms512m表示初始堆内存512MB,-Xmx1024m表示最大堆内存1024MB):export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m" # 适用于Tomcat 8及以下
# 或(适用于Tomcat 9及以上)
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m"
保存后重启Tomcat。Tomcat的配置文件(如server.xml、context.xml)存在语法错误(如标签未闭合、属性值错误),会导致启动失败。
conf/server.xml,检查是否有明显的XML语法错误(如<Connector>标签缺少port属性)。系统内存不足、磁盘空间耗尽或CPU占用过高,会导致Tomcat无法启动。
free -m命令查看内存使用情况(重点关注available列,表示可用内存)。df -h命令查看磁盘空间(重点关注/根分区,剩余空间建议大于10%)。top命令查看CPU占用率(若%CPU长期高于80%,需优化系统或减少负载)。若Tomcat部署的应用依赖的库文件(如JAR包)缺失或版本不匹配,会导致启动失败(如ClassNotFoundException、NoClassDefFoundError)。
webapps/<应用名>/WEB-INF/lib目录,确认所有必需的JAR包存在(如javax.servlet-api.jar)。lib目录。若应用部署失败(如localhost.<日期>.log中出现Deployment failure),需重新部署应用:
webapps目录,删除对应的应用文件夹(如myapp)和WAR文件(如myapp.war)。webapps目录,Tomcat会自动解压部署(或手动执行startup.sh)。若需要Tomcat开机自动启动,可将其添加为系统服务:
bin/startup.sh复制到/etc/init.d/tomcat,并编辑脚本(添加#!/bin/bash、JAVA_HOME等配置)。chkconfig --add tomcat(CentOS)或systemctl enable tomcat(Ubuntu 16.04+)。service tomcat start(CentOS)或systemctl start tomcat(Ubuntu)。