GCP虚拟机调整配置重启后Tomcat8访问报404错误排查求助
核心问题本质
你当前看到的Tomcat原生404页面,说明Tomcat进程本身正常运行、并未出现崩溃,核心原因是Tomcat没有加载到你部署的业务应用,和你之前调整GCP虚拟机配置、重启实例的操作直接相关。
你之前通过shutdown.sh看到的CATALINA_BASE路径是静态脚本推导的结果,不是服务实际运行时的真实配置,和你的部署路径存在明显错位。
分步骤排查与修复操作
- 校验运行中Tomcat的实际工作目录
执行命令获取进程真实启动参数:ps -ef | grep tomcat
重点查看输出中-Dcatalina.base对应的路径值。Debian仓库安装的Tomcat8,设计上会将/usr/share/tomcat8作为程序包存放目录,将可变的运行时目录(包含webapps部署目录、应用配置)默认放在/var/lib/tomcat8下。如果启动参数中该路径被错误指向/usr/share/tomcat8,Tomcat就只会去该目录下的webapps文件夹寻找应用,无法读取你部署在/var/lib/tomcat8/webapps下的业务内容,最终返回原生404。
注意:不要手动执行Tomcat安装目录下的shutdown.sh/startup.sh做服务运维,Debian仓库安装的Tomcat8由systemd托管,手动执行脚本时会使用脚本所在目录作为默认CATALINA_BASE,看到的路径配置不反映服务真实运行状态,正确的启停操作应通过systemctl start tomcat8、systemctl stop tomcat8完成。 - 确认应用部署位置与访问路径匹配
Tomcat访问http://localhost:8080/根路径时,默认会加载webapps目录下名称为ROOT的应用:- 如果你部署的是带名称的应用包(比如
order.war),直接访问根路径必然返回404,需要访问http://localhost:8080/order才可正常加载 - 执行命令核对应用文件:
ls -l /var/lib/tomcat8/webapps,确认你期望对外提供服务的应用是否在目录内,排查是否因为实例重启导致文件丢失、磁盘挂载异常被清空
- 如果你部署的是带名称的应用包(比如
- 检查目录权限配置
执行命令校验权限:ls -ld /var/lib/tomcat8 /var/lib/tomcat8/webapps
确保目录属主为系统创建的tomcat用户,权限不低于755;webapps下的应用文件、war包也要保证tomcat用户有读权限,避免重启实例过程中磁盘权限重置,导致Tomcat无法读取部署文件、跳过应用加载。 - 核对运行时日志的加载记录
直接查看Tomcat实际运行日志,路径默认在/var/log/tomcat8/catalina.out,在日志中检索两类关键信息:- 检索
Deploying web application archive,确认日志中记录的部署文件路径是否和你的应用路径一致 - 检索
SEVERE/Error,排查是否存在war包损坏、应用XML配置解析失败等导致应用部署中断的问题
- 检索
- 修复启动配置漂移
如果第一步检查发现catalina.base路径错位,执行命令查看systemd托管的Tomcat启动配置:systemctl cat tomcat8
确认配置中CATALINA_BASE环境变量的值,正常应为/var/lib/tomcat8,如果被错误配置为/usr/share/tomcat8,修正配置后执行systemctl daemon-reload,再重启Tomcat服务即可恢复。
内容的提问来源于stack exchange,提问作者dgarg
相关产品推荐
相关产品推荐

