一、环境变量配置错误
表现:启动Tomcat时提示“The JAVA_HOME environment variable is not defined”(未定义JAVA_HOME)或“UnsupportedClassVersionError”(类版本不支持)。
原因:系统未配置JDK路径,或Tomcat与JDK版本不兼容(如Tomcat 10需要JDK 11及以上,而使用JDK 8会导致版本冲突)。
解决方案:
/etc/profile文件,添加export JAVA_HOME=/usr/local/java(替换为实际JDK路径)和export PATH=$PATH:$JAVA_HOME/bin,执行source /etc/profile使配置生效。二、权限不足
表现:Tomcat无法启动,日志提示“Permission denied”(权限被拒绝);无法写入日志文件(logs/目录)、解压WAR包(webapps/目录)或访问临时目录。
原因:Tomcat目录或文件的属主/属组未设置为Tomcat用户(通常为tomcat),或权限不足(如缺少读写执行权限)。
解决方案:
chown -R tomcat:tomcat /path/to/tomcat(替换为Tomcat安装路径),将Tomcat目录的所有者和组设置为tomcat。chmod -R 755 /path/to/tomcat,赋予目录读写执行权限(755权限允许所有者完全控制,其他用户仅读和执行)。三、端口冲突
表现:启动时提示“Address already in use”(地址已被使用),无法绑定8080端口(或其他默认端口如8005、8009)。
原因:端口被其他应用程序占用(如另一个Tomcat实例、Nginx、Apache),或旧Tomcat进程未完全关闭。
解决方案:
netstat -tuln | grep 8080(替换为目标端口),查看占用端口的进程ID(PID)。kill -9 <PID>(替换为实际PID),强制结束占用端口的进程。conf/server.xml文件,找到<Connector port="8080" protocol="HTTP/1.1">标签,将port属性修改为未被占用的端口(如8081),保存后重启Tomcat。四、内存溢出(OOM)
表现:启动或运行时提示“java.lang.OutOfMemoryError”(内存溢出),常见子类型包括:
Java heap space(堆内存不足):无法分配对象内存,导致应用崩溃。PermGen space(永久代空间不足,Java 8前)/Metaspace space(元空间不足,Java 8+):无法加载类元数据。unable to create new native thread(无法创建新线程):系统线程数超过限制。-Xms仅为64MB),或应用存在内存泄漏(如大量对象无法被GC回收)。bin/catalina.sh文件(Linux下),在cygwin=false前添加以下参数(根据服务器内存调整,建议-Xms和-Xmx设置为相同值,避免频繁扩容):
JAVA_OPTS="-Xms512m -Xmx1024m"(初始堆512MB,最大堆1024MB)。JAVA_OPTS="$JAVA_OPTS -XX:PermSize=128m -XX:MaxPermSize=256m";(Java 8+):JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"。ulimit -u)或优化应用线程池配置。五、项目部署问题
1. WAR包无法自动解压
表现:将WAR包放入webapps/目录后,未生成对应的项目目录,访问时提示“404 Not Found”。
原因:WAR包损坏(如下载不完整),或Tomcat未开启自动部署(conf/server.xml中禁用了自动部署)。
解决方案:
jar -xvf project.war命令手动解压WAR包,若解压失败则重新下载或生成WAR包。conf/server.xml中<Host>标签的autoDeploy="true"(默认开启),且unpackWARs="true"(默认开启)。2. 数据库连接失败
表现:应用日志提示“Connection refused”(连接被拒绝)或“SQLException”(SQL异常),无法访问数据库。
原因:数据库服务未启动(如MySQL未运行),或连接参数(URL、用户名、密码)错误(如数据库地址填写错误、用户名密码不匹配)。
解决方案:
systemctl start mysql(MySQL)或systemctl start postgresql(PostgreSQL),确保数据库服务处于运行状态。WEB-INF/web.xml或应用配置文件(如Spring的application.properties),核对数据库URL(如jdbc:mysql://localhost:3306/mydb)、用户名、密码是否正确。六、配置文件错误
表现:启动时提示“Configuration error”(配置错误),或Tomcat无法启动(如server.xml语法错误)。
原因:server.xml、context.xml等配置文件存在语法错误(如标签未闭合、属性值未加引号),或路径配置错误(如docBase指向不存在的目录)。
解决方案:
logs/catalina.out文件,查找具体的错误提示(如“Element type ‘Connector’ must be followed by either attribute specifications, ‘>’ or ‘/’”),根据提示修正配置文件。七、SELinux限制
表现:Tomcat无法访问某些文件或端口(如logs/目录无法写入,8080端口无法绑定),即使权限设置正确。
原因:SELinux(Security-Enhanced Linux)开启了强制访问控制(MAC),限制了Tomcat的权限。
解决方案:
setenforce 0,将SELinux模式设置为“Permissive”(宽松模式),重启Tomcat测试是否解决问题。chcon -R -t httpd_sys_rw_content_t /path/to/tomcat/logs(修改logs目录的安全上下文,允许Tomcat写入),或通过semanage命令配置更详细的策略。