一、环境变量配置错误
表现:启动Tomcat时报错“The JAVA_HOME environment variable is not defined”(未定义JAVA_HOME)或类加载错误(如UnsupportedClassVersionError)。
原因:未在系统或Tomcat配置中设置JDK路径,或JDK版本与Tomcat不兼容(如Tomcat 10需要JDK 11及以上)。
解决方法:
/etc/profile),添加以下内容(以实际JDK路径为准):export JAVA_HOME=/usr/local/java # JDK安装路径
export PATH=$PATH:$JAVA_HOME/bin
执行source /etc/profile使配置生效。二、权限问题
表现:Tomcat无法启动、无法写入日志(如logs/catalina.out)或解压WAR包,报错“Permission denied”。
原因:Tomcat目录或文件的属主/属组不正确,或用户对关键目录(如webapps、logs、temp)无读写权限。
解决方法:
tomcat用户(默认用户):chown -R tomcat:tomcat /path/to/tomcat # 替换为实际Tomcat安装路径
chmod -R 755 /path/to/tomcat
bin/*.sh)有执行权限:chmod +x /path/to/tomcat/bin/*.sh
三、端口冲突
表现:启动时报错“Address already in use”(地址已被使用),无法绑定端口(默认8080)。
原因:旧Tomcat进程未关闭,或其他服务(如Nginx、Apache)占用了该端口。
解决方法:
netstat -tuln | grep 8080 # 替换为实际端口
kill -9 <PID>
conf/server.xml,找到<Connector port="8080">,修改为<Connector port="8081">。四、内存溢出(OutOfMemoryError)
表现:日志中出现java.lang.OutOfMemoryError: Java heap space(堆内存溢出)、PermGen space(永久代溢出,Java 8前)或Metaspace(Java 8后)等错误。
原因:JVM内存分配不足(如初始堆内存-Xms过小)、程序存在内存泄漏(如未关闭的数据库连接、集合类未清空)。
解决方法:
bin/catalina.sh):export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m" # Java 8前
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m" # Java 8后
根据服务器内存调整-Xms(初始堆)和-Xmx(最大堆)的值(建议不超过物理内存的70%)。五、项目部署问题
1. WAR包无法自动解压
表现:WAR包放入webapps目录后未生成项目目录,访问时报404错误。
原因:WAR包损坏、Tomcat未开启自动部署(autoDeploy="true")或目录权限不足。
解决方法:
jar -xvf project.war命令手动解压,确认文件无损坏。server.xml中Host标签的autoDeploy属性为true(默认开启)。webapps目录有读写权限(参考“权限问题”解决方法)。2. 数据库连接失败
表现:应用日志中出现Connection refused(连接被拒绝)或SQLException(SQL异常)。
原因:数据库服务未启动、连接参数(URL、用户名、密码)错误或驱动缺失。
解决方法:
systemctl start mysql(MySQL示例)或systemctl start postgresql(PostgreSQL示例)。WEB-INF/web.xml或连接池配置(如Druid、HikariCP)中的数据库URL、用户名、密码是否正确。mysql-connector-java.jar)已放入WEB-INF/lib目录。六、日志与调试技巧
tail -f /path/to/tomcat/logs/catalina.out命令监控Tomcat启动和运行日志,快速定位错误信息。conf/tomcat-users.xml是否配置了管理员角色和用户(如<role rolename="manager-gui"/>、<user username="admin" password="123456" roles="manager-gui"/>),并修改webapps/manager/META-INF/context.xml放开IP限制(如注释<Valve>标签)。tail -f /path/to/tomcat/logs/access_log.*命令监控用户访问记录,辅助排查访问问题。七、SELinux限制(仅限启用了SELinux的系统)
表现:Tomcat无法访问某些文件或端口,即使权限正确。
原因:SELinux的安全策略限制了Tomcat的访问权限。
解决方法:
setenforce 0(重启后恢复)。/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启服务器。chcon命令修改文件安全上下文,如:chcon -R -t httpd_sys_rw_content_t /path/to/tomcat/logs
chcon -R -t httpd_sys_rw_content_t /path/to/tomcat/webapps