Tomcat的日志是故障排查的核心依据,关键日志文件位于$TOMCAT_HOME/logs目录下,包括:
tail -f $TOMCAT_HOME/logs/catalina.out
通过日志中的错误关键词(如"Port already in use"、“OutOfMemoryError”、“Parse error in application web.xml”)可快速定位问题类型。
Tomcat依赖Java运行环境,需确保以下配置正确:
java -version
若未安装或版本不符,需通过yum install java-11-openjdk(CentOS默认仓库)或官网下载安装包安装。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使配置生效。Tomcat的核心配置文件位于$TOMCAT_HOME/conf目录,常见错误及排查方法:
<Connector>标签的端口配置(默认8080),确保无语法错误(如标签未闭合);若端口冲突,修改为其他端口(如8081)并重启Tomcat。<servlet-mapping>的url-pattern格式)。<Resource>标签的url、username、password是否正确)。$TOMCAT_HOME/bin/shutdown.sh
$TOMCAT_HOME/bin/startup.sh
Tomcat运行需要足够的系统资源,若资源不足会导致启动失败或响应缓慢:
free -m查看内存剩余量,若剩余内存不足(如小于1GB),需调整Tomcat的JVM内存参数(见“调整JVM内存参数”部分)。df -h查看磁盘剩余空间,若/分区剩余空间小于10%,需清理旧日志(如catalina.out)或临时文件。top查看CPU使用率,若某进程占用过高(如超过80%),需终止异常进程(kill -9 PID)或优化应用代码。Tomcat默认使用8080端口(HTTP)、8005端口(SHUTDOWN)、8009端口(AJP),若端口被其他进程占用,会导致启动失败:
netstat -tuln | grep 8080
# 或推荐使用ss命令(更高效)
ss -tunlp | grep 8080
输出结果中的PID/Program name字段标识了占用端口的进程(如1234/java)。kill -9 PID # 替换为实际的PID
server.xml文件,更改<Connector>标签的port属性(如将8080改为8081)。CentOS的防火墙(firewalld)和SELinux可能阻止Tomcat的外部访问:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
使用sudo firewall-cmd --list-all验证端口是否已放行。sestatus显示Enforcing),可能阻止Tomcat绑定端口。可临时禁用SELinux(测试用):sudo setenforce 0
若禁用后问题解决,可修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled,并重启系统使变更生效。若Tomcat启动成功但应用无法访问(如访问http://localhost:8080/app返回404或500错误),需排查应用部署问题:
$TOMCAT_HOME/webapps目录(如app.war或app文件夹存在)。$TOMCAT_HOME/logs/localhost.<date>.log文件,定位应用初始化错误(如数据库驱动缺失、Spring配置文件错误)。$TOMCAT_HOME/work目录(Tomcat编译后的临时文件),然后重启Tomcat。若日志中出现java.lang.OutOfMemoryError(如Java heap space、PermGen space),需调整JVM内存参数:
$TOMCAT_HOME/bin/catalina.sh,在文件开头添加以下参数(根据服务器内存调整值):export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
参数说明:
-Xms:初始堆内存大小(如512MB);-Xmx:最大堆内存大小(如1024MB);-XX:MetaspaceSize:初始元空间大小(Java 8+替代永久代);-XX:MaxMetaspaceSize:最大元空间大小。