看起来你贴的这些日志是 Tomcat 的
org.apache.catalina.webresources.Cache.getResource
“无法缓存…因为 Web 应用 [jenkins] 已停止”的提示。它只是说明:Jenkins 这个 WebApp 已经被停止了(崩掉/被杀掉/被重启),此时还有请求进来,Tomcat 想把静态文件放进缓存却放不进去。它不是根因,真正导致 Jenkins 停掉的错误通常在这些日志之前。
下面给你一套快速排查与修复步骤(按优先级):
- 找根因日志
- 查看停止前的 200 行:
tail -n 1000 $CATALINA_BASE/logs/catalina.out | grep -nE "SEVERE|ERROR|Exception|OutOfMemoryError|UnsupportedClassVersionError|NoSuchMethodError"
- 同时看
$JENKINS_HOME/jenkins.log
、$CATALINA_BASE/logs/localhost.*.log
- 如果是内存问题会看到
OutOfMemoryError
或内核 OOM:journalctl -k -b | grep -i oom
- 资源检查
- 磁盘空间/inode:
df -h && df -i
(空间满了 Jenkins 也会直接挂) - 文件句柄:
ulimit -n
至少 8192,建议 65535 - 内存占用:
free -m
或top
观察是否被 OOM Killer 干掉
- Java 与版本兼容
java -version
确认使用 Java 17(当前 Jenkins LTS 最低要求 17)- Jenkins WAR 与插件是否为兼容版本(过旧插件很常让 Jenkins 在启动后崩溃)
- 给 JVM 合理内存并开启崩溃证据
在 Tomcat 的 CATALINA_OPTS 里加(按机器内存调整):
export CATALINA_OPTS="-Xms2g -Xmx4g -XX:+UseG1GC -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat/jenkins.hprof"
然后重启 Tomcat。若再次 OOM,会留下 heap dump 便于定位泄漏/大对象。
- 插件/配置导致的崩溃
- 先尝试“安全模式”启动(若 UI 还能进)
- 启不来就禁用插件排查:把
$JENKINS_HOME/plugins/*.jpi
临时移走或改成.jpi.disabled
,先只保留最基础插件,启动成功后再逐个恢复 - 看是否有最近升级/新增插件导致问题
- 磁盘清理
- 清理
$JENKINS_HOME/jobs/**/builds
里的旧构建、workspace/
的临时文件 - 可用脚本或配置“保留构建个数”来自动清理
- 避免日志刷屏
- 这些 Cache 日志只是因为服务已停止还在被访问。修好根因后自然消失
- 若外部健康检查/探测在不停打接口,考虑在 Jenkins 下线时让负载均衡先摘除或用防火墙限制
- 不依赖 Tomcat(建议)
- 官方推荐直接运行
java -jar jenkins.war
或使用系统包安装的 Jenkins(内置 Winstone)。在 Tomcat 下运行更容易出现兼容/资源问题