Tomcat在Linux上的故障排查指南
日志是故障排查的核心依据,Tomcat的日志文件(如catalina.out、localhost.log)记录了启动、运行及关闭过程中的详细信息。使用以下命令实时查看日志:
tail -f /path/to/tomcat/logs/catalina.out
通过日志中的ERROR或Exception关键字(如java.lang.OutOfMemoryError、Port already in use),可快速定位问题根源。
Tomcat默认使用8080端口(HTTP)、8005端口(SHUTDOWN)、8009端口(AJP),若端口被其他进程占用,会导致启动失败。使用以下命令检查端口占用:
# Linux系统(推荐lsof)
lsof -i :8080
# 或netstat
netstat -tulnp | grep 8080
若端口被占用,可通过以下方式解决:
kill -9 <PID>;conf/server.xml中的<Connector>标签(如将port="8080"改为port="8081")。Tomcat依赖JDK运行,需确保以下配置正确:
java -version
若未安装或版本不符,需下载对应JDK并安装。~/.bashrc(Ubuntu/CentOS通用)或/etc/profile,添加:export JAVA_HOME=/usr/local/jdk/jdk1.8.0_151 # 替换为实际JDK路径
export PATH=$JAVA_HOME/bin:$PATH
执行source ~/.bashrc使配置生效。Tomcat的核心配置文件(server.xml、context.xml、web.xml)若存在语法错误,会导致启动失败。可使用以下工具验证:
xmllint命令(需安装libxml2-utils包):xmllint --noout /path/to/tomcat/conf/server.xml
server.xml中的<Connector>、<Host>标签配置(如端口号、路径),context.xml中的资源定义(如数据库连接池)。Tomcat进程需要对安装目录、日志目录、webapps目录有读写权限。通常将Tomcat目录归属给tomcat用户(若未创建,需先创建):
# 创建tomcat用户组及用户
sudo groupadd tomcat
sudo useradd -M -s /bin/nologin -g tomcat -d /path/to/tomcat tomcat
# 修改目录归属
sudo chown -R tomcat:tomcat /path/to/tomcat
# 设置目录权限(755为目录通用权限,750为webapps目录权限)
sudo chmod -R 755 /path/to/tomcat
sudo chmod -R 750 /path/to/tomcat/webapps
避免使用root用户运行Tomcat,防止安全风险。
系统资源(内存、CPU、文件描述符)不足会导致Tomcat启动缓慢或崩溃:
free -h查看内存剩余,若内存不足,调整Tomcat堆内存(编辑bin/catalina.sh):export JAVA_OPTS="-Xms512m -Xmx1024m" # 初始堆512MB,最大堆1024MB
top命令查看CPU占用,若CPU过高,可能是应用程序性能问题(如死循环),需优化代码。/etc/security/limits.conf):* soft nofile 65536
* hard nofile 65536
执行ulimit -n 65536使配置立即生效。防火墙或SELinux会阻止外部访问Tomcat端口,需调整配置:
sudo firewall-cmd --permanent --add-port=8080/tcp # 开放8080端口
sudo firewall-cmd --reload
sudo setenforce 0
若需永久关闭,编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled。若Tomcat以服务方式运行(如systemd),需检查服务状态:
# 查看Tomcat服务状态(假设服务名为tomcat)
sudo systemctl status tomcat
# 若未启动,启动服务
sudo systemctl start tomcat
# 设置开机自启
sudo systemctl enable tomcat
若服务启动失败,可通过journalctl -xe查看系统日志,获取详细错误信息。
若Tomcat运行缓慢,可使用以下工具分析性能:
top(查看CPU/内存)、vmstat 1(查看虚拟内存)、iostat 1(查看磁盘I/O)。bin/catalina.sh,添加-Dcom.sun.management.jmxremote参数),使用jconsole或VisualVM连接,查看线程、内存、类加载情况。JAVA_OPTS中添加-Xloggc:/path/to/gc.log -XX:+PrintGCDetails,使用gclogviewer工具分析垃圾回收情况,定位内存泄漏。