Tomcat在Linux中的故障排查技巧
Tomcat的日志文件是故障排查的核心依据,其中logs/catalina.out记录了启动、运行及关闭过程的详细信息。当出现故障时,使用tail -f catalina.out实时查看日志输出,或通过grep命令过滤关键错误(如grep "ERROR" catalina.out),可快速定位问题根源(如类加载失败、端口冲突、配置错误等)。
Tomcat默认使用8080端口(HTTP)、8005端口(SHUTDOWN)、8009端口(AJP),若这些端口被其他进程占用,会导致Tomcat无法启动。使用以下命令检查端口占用情况:
sudo netstat -tuln | grep <端口号> # 如8080
或
sudo lsof -i:<端口号>
若端口被占用,可通过修改conf/server.xml文件中的<Connector>标签端口(如将port="8080"改为port="8081"),或停止占用端口的进程(kill -9 <PID>)解决。
Tomcat依赖Java运行时环境(JRE/JDK),需确保以下配置正确:
java -version确认安装的Java版本符合Tomcat要求(如Tomcat 10需Java 11及以上);catalina.sh(bin目录下),在开头添加export JAVA_HOME=/path/to/jdk(如/usr/lib/jvm/java-11-openjdk-amd64);JRE_HOME,指向JDK的jre目录(如export JRE_HOME=$JAVA_HOME/jre)。Tomcat的关键配置文件(server.xml、context.xml、web.xml)若有语法错误或路径配置不当,会导致启动失败:
xmllint --noout conf/server.xml验证server.xml的XML语法;server.xml中的docBase(应用部署目录)、Context路径等配置指向正确的目录,且目录存在。内存不足是Tomcat常见的故障原因,表现为OutOfMemoryError(如Java heap space、PermGen space)。解决方法:
catalina.sh:在文件开头添加JVM内存参数,如:export JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m" # Java 8及之前
或(Java 8之后,用Metaspace替代永久代):export JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
jconsole、jvisualvm或top命令监控内存占用,根据实际情况调整-Xms(初始堆)和-Xmx(最大堆)的值。Tomcat需要对运行目录、日志目录及Web应用目录有读写权限,否则会导致启动失败。常用命令:
sudo chown -R tomcat:tomcat /path/to/tomcat # 将Tomcat目录所有者设为tomcat用户
sudo chmod -R 755 /path/to/tomcat # 设置目录权限为755(所有者可读写执行,其他用户可读执行)
sudo chmod +x /path/to/tomcat/bin/*.sh # 赋予启动脚本执行权限
其中tomcat为运行Tomcat的系统用户(需提前创建)。
若Tomcat以系统服务方式运行(如systemd),需检查服务状态:
sudo systemctl status tomcat # 查看服务状态
sudo systemctl start tomcat # 启动服务
sudo systemctl restart tomcat # 重启服务
若服务未注册,可将Tomcat添加为系统服务(参考systemctl文档)。
系统资源不足(如内存、CPU、磁盘空间)会导致Tomcat无法启动或运行缓慢:
free -m查看内存使用情况,top查看CPU占用;df -h查看磁盘剩余空间,确保/分区有足够空间(建议至少10%空闲);swap)大小。