常见原因:端口冲突(默认8080端口被占用)、Java环境未正确配置、内存不足、配置文件语法错误、权限不足。
解决方法:
netstat -tuln | grep 8080,若端口被占用,修改$TOMCAT_HOME/conf/server.xml中的<Connector port="8080">为其他未被占用的端口(如8081),重启Tomcat。java -version确认Java已安装;若未安装,运行sudo yum install java-1.8.0-openjdk-devel -y安装OpenJDK;检查JAVA_HOME环境变量(echo $JAVA_HOME),若未设置,在/etc/profile中添加export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk并执行source /etc/profile。$TOMCAT_HOME/bin/catalina.sh,在文件开头添加JAVA_OPTS="-Xms512m -Xmx1024m"(根据服务器内存调整初始堆大小-Xms和最大堆大小-Xmx)。vim或nano打开server.xml、context.xml,检查是否有语法错误(如标签未闭合、属性值缺失),保存后重启Tomcat。tomcat)对$TOMCAT_HOME及其子目录有读写权限,运行sudo chown -R tomcat:tomcat /opt/tomcat(假设Tomcat安装在/opt/tomcat)。常见原因:防火墙阻止访问、SELinux限制、Tomcat绑定到localhost(仅本地访问)、端口未正确开放。
解决方法:
firewalld,运行sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent(永久开放8080端口),然后sudo firewall-cmd --reload(重新加载防火墙配置)。sudo setenforce 0;若需永久禁用,编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive。$TOMCAT_HOME/conf/server.xml,找到<Connector>标签,确保address属性未设置为127.0.0.1(默认是0.0.0.0,允许所有IP访问),例如:<Connector port="8080" protocol="HTTP/1.1" address="0.0.0.0" .../>。常见表现:启动Tomcat时报错“Neither the JAVA_HOME nor the JRE_HOME environment variable is defined”(未定义JAVA_HOME或JRE_HOME)。
解决方法:
bin/setclasspath.sh文件(在bin目录下),在“# Make sure prerequisite environment variables are set”注释下方添加:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk(根据实际Java安装路径调整)export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre常见表现:Tomcat日志中出现java.lang.OutOfMemoryError: Java heap space(堆内存不足)或java.lang.OutOfMemoryError: Metaspace(元空间不足)。
解决方法:
$TOMCAT_HOME/bin/catalina.sh,在文件开头添加或修改JAVA_OPTS参数,调整堆内存和元空间大小:JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"-Xms:初始堆大小;-Xmx:最大堆大小;-XX:MetaspaceSize:初始元空间大小;-XX:MaxMetaspaceSize:最大元空间大小)常见表现:访问项目时报错“Failed to load class javax.servlet.Filter”或“ClassNotFoundException”。
解决方法:
pom.xml中添加以下依赖:<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
若使用Gradle,在build.gradle中添加:implementation 'javax.servlet:javax.servlet-api:3.1.0'常见原因:未创建systemd服务文件、服务文件配置错误、权限不足。
解决方法:
sudo vim /etc/systemd/system/tomcat.service,添加以下内容(根据实际Tomcat安装路径调整):[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload(重新加载systemd配置)sudo systemctl enable tomcat(设置开机自启)sudo systemctl start tomcat(立即启动Tomcat)sudo systemctl status tomcat(若显示“active (running)”,则表示启动成功)。常见表现:Tomcat无法读取Web应用文件(如webapps目录下的项目),日志中出现“Permission denied”错误。
解决方法:
sudo setenforce 0,若问题解决,说明是SELinux导致。sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/webapps(将webapps目录的SELinux上下文设置为允许HTTP服务读写),或编辑SELinux策略文件(需管理员权限)。