Debian下Tomcat错误排查技巧
Tomcat的日志文件是定位错误的“金钥匙”,Debian下日志通常位于/opt/tomcat/logs(自定义安装路径)或/var/log/tomcatX(版本化目录,如tomcat9)。常用命令:
tail -f /opt/tomcat/logs/catalina.out(catalina.out记录启动及运行日志);grep -i "error\|severe\|exception" /opt/tomcat/logs/catalina.out(忽略大小写匹配错误、严重警告或异常);localhost_access_log.*.txt(路径由server.xml中AccessLogValve配置决定),统计访问频率或失败请求。Tomcat默认使用8080端口(HTTP)、8005端口(关闭命令)、8009端口(AJP协议),若端口被占用会导致启动失败。排查步骤:
sudo netstat -tulnp | grep <端口号>(如sudo netstat -tulnp | grep 8080),输出中PID/Program name列显示占用进程;sudo kill -9 <PID>(强制终止进程);/opt/tomcat/conf/server.xml,找到<Connector>标签修改port属性(如将8080改为8081),保存后重启Tomcat。Tomcat依赖Java环境,需确保JAVA_HOME(JDK安装路径)和CATALINA_HOME(Tomcat安装路径)正确配置:
java -version(需为Tomcat支持的版本,如Tomcat 10需JDK 11+);/etc/environment(系统级)或~/.bashrc(用户级),添加:export JAVA_HOME=/usr/lib/jvm/default-java # 替换为实际JDK路径
export CATALINA_HOME=/opt/tomcat # 替换为实际Tomcat路径
source /etc/environment或source ~/.bashrc,重启Tomcat使变量生效。Tomcat的server.xml(主配置文件)、web.xml(应用部署配置)等文件的语法错误会导致启动失败:
xmllint工具检查,如xmllint --noout /opt/tomcat/conf/server.xml(无输出则表示语法正确);<Connector>标签的port、protocol属性是否正确;<Context>标签的path(应用上下文路径)、docBase(应用目录)是否有效;server.xml中是否有未闭合的标签。若出现java.lang.OutOfMemoryError(内存溢出),需调整Tomcat的JVM堆内存大小:
/opt/tomcat/bin/catalina.sh(Linux系统),在文件开头添加:export JAVA_OPTS="-Xms512M -Xmx1024M -XX:MaxPermSize=256M" # 初始堆内存512MB,最大堆内存1024MB,永久代256MB(根据服务器配置调整)
sudo systemctl restart tomcat(使内存配置生效)。Tomcat需对其目录(如logs、work、webapps)有读写权限,权限不足会导致启动失败或应用无法加载:
tomcat用户(默认用户),如sudo chown -R tomcat:tomcat /opt/tomcat;sudo chmod -R 755 /opt/tomcat;logs、work目录需写入权限,如sudo chmod -R 775 /opt/tomcat/logs /opt/tomcat/work。若应用无法访问或报错,需排查应用部署配置:
webapps目录下的WAR文件完整(未损坏),可通过unzip -t your-app.war测试;webapps/your-app/WEB-INF/logs(若有),或Tomcat的logs目录下(如catalina.out中会记录应用部署错误);WEB-INF/lib目录下包含应用所需的所有JAR文件,无缺失或版本冲突。若上述方法无法定位问题,可使用调试工具捕获代码级错误:
catalina.sh,添加JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"(开启5005端口调试);logging.properties中提高关键组件的日志级别(如org.apache.catalina.level=FINE),获取更详细的日志信息。