Tomcat启动失败的详细原因会记录在日志文件中,核心日志路径为${CATALINA_HOME}/logs/catalina.out(CATALINA_HOME为Tomcat安装目录)。使用以下命令实时查看日志输出,快速定位错误关键词(如“Port already in use”“java.lang.OutOfMemoryError”“Configuration error”):
tail -f ${CATALINA_HOME}/logs/catalina.out
根据日志中的具体提示,可针对性解决后续问题(如端口冲突需改端口,内存不足需调内存)。
Tomcat默认使用8080端口(HTTP)、8005端口(关闭命令)、8009端口(AJP),若这些端口被其他程序(如Nginx、Apache、其他Tomcat实例)占用,会导致启动失败。
lsof -i:8080 # 查看8080端口的进程ID(PID)
netstat -tulnp | grep 8080 # 替代方案,显示端口占用详情
kill -9 <PID> # 替换<PID>为实际进程ID
${CATALINA_HOME}/conf/server.xml文件,找到<Connector>标签,修改port属性(如改为8081):<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
Tomcat依赖Java运行时环境(JRE/JDK),常见错误包括:
java -version无输出);java -version # 需输出Java版本信息(如1.8.0_392)
which java # 确认Java安装路径(如/usr/bin/java)
/etc/profile、Ubuntu的~/.bashrc),添加以下内容(替换为实际JDK路径):export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk # JDK安装路径
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile # 或source ~/.bashrc
若Tomcat启动时报OutOfMemoryError(如java.lang.OutOfMemoryError: Java heap space),说明JVM内存分配不足,需调整内存参数。
${CATALINA_HOME}/bin/catalina.sh文件(Linux下),在文件开头添加以下参数(根据服务器内存调整,如4GB内存可设置为-Xms512m -Xmx1024m):export CATALINA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"
参数说明:
-Xms:初始堆内存大小(如512MB);-Xmx:最大堆内存大小(如1024MB);-XX:MaxPermSize:永久代内存大小(适用于Tomcat 8及以下,Tomcat 9及以上可忽略)。Tomcat的核心配置文件(server.xml、context.xml、web.xml)若存在语法错误(如标签未闭合、属性值错误),会导致启动失败。
xmllint工具(Linux自带)检查配置文件:xmllint --noout ${CATALINA_HOME}/conf/server.xml # 检查server.xml语法
xmllint --noout ${CATALINA_HOME}/conf/context.xml # 检查context.xml语法
若存在错误,工具会提示错误位置(如第几行、第几列),根据提示修改文件即可。Tomcat需要对安装目录、日志目录、临时目录有读写权限,若权限不足(如root用户安装后,tomcat用户无法访问),会导致启动失败。
tomcat,安装目录为/opt/tomcat):chown -R tomcat:tomcat /opt/tomcat # 将所有权赋予tomcat用户
chmod -R 755 /opt/tomcat # 设置目录权限(所有者可读写执行,其他用户可读执行)
777(完全开放),以免带来安全风险。若服务器磁盘空间不足(df -h显示根分区使用率超过90%),Tomcat无法写入日志或临时文件,会导致启动失败。
df -h # 查看各分区使用情况
/opt/tomcat/logs/catalina.out,可使用truncate命令清空文件,而非直接删除):truncate -s 0 /opt/tomcat/logs/catalina.out # 清空日志文件
/tmp目录下的临时文件、下载的安装包)。若服务器开启了防火墙(如firewalld、iptables),未放行Tomcat端口(如8080),会导致外部无法访问Tomcat,甚至启动时连接失败。
firewalld为例,CentOS 7+):firewall-cmd --permanent --add-port=8080/tcp # 永久放行8080端口
firewall-cmd --reload # 重新加载防火墙配置
systemctl stop firewalld # CentOS 7+
systemctl disable firewalld # 禁止开机启动
若使用iptables,需添加规则:iptables -A INPUT -p tcp --dport 8080 -j ACCEPT,然后保存规则。若Tomcat以系统服务方式运行(如systemctl),需检查服务状态,确认是否启动成功或存在错误。
systemctl status tomcat # 查看Tomcat服务状态(需提前注册服务)
journalctl -u tomcat -f # 实时查看Tomcat服务日志
systemctl start tomcat # 启动Tomcat服务
systemctl restart tomcat # 重启Tomcat服务
若服务未注册,需先创建服务脚本(如/etc/init.d/tomcat),再使用chkconfig或systemctl注册。kill -9),可能会留下锁定文件(如/opt/tomcat/work/Catalina/下的.lock文件),需手动删除:rm -rf /opt/tomcat/work/Catalina/*.lock # 删除锁定文件
mysql-connector-java.jar)未放置在WEB-INF/lib目录下,会导致启动失败,需将依赖库复制到对应目录。