AWS ECS部署Jenkins报JVM is terminating. Shutting down Jetty无异常如何解决
核心问题排查方向
- 首先排查负载均衡健康检查配置错误:你当前目标组健康检查匹配码设置为仅
200,但未认证状态下访问Jenkins根路径/会返回302重定向到登录页,健康检查会判定为失败,连续失败达到阈值后ECS服务会自动终止不健康任务,就会出现你看到的JVM正常收到终止信号关闭Jetty的日志,没有任何错误输出。 - 其次排查容器级内存限制过低:你的任务定义中任务级内存配置为2048,但容器级内存仅配置了512,Jenkins启动后加上插件运行很容易超过512M内存阈值,被内核OOM Killer终止,也会出现相同的关闭日志。
- 最后排查JVM堆内存未适配容器配额:默认JVM不会识别容器的内存限制,会读取宿主机内存配置分配堆内存,很容易出现实际内存使用超过容器配额被终止的问题。
具体解决方案
- 修改目标组健康检查配置:
把健康检查的匹配码改为200-399,或者把健康检查路径改为/login(该路径未认证访问也会返回200状态码),同时调高健康检查的超时时间和不健康阈值,适配Jenkins的启动速度:resource "aws_lb_target_group" "target_group" { name = "target-group" port = 8080 protocol = "HTTP" target_type = "ip" vpc_id = "vpc-000" health_check { matcher = "200-399" path = "/" timeout = 10 interval = 30 unhealthy_threshold = 3 } depends_on = [ aws_alb.jenkinsdev_load_balancer ] } - 调整容器内存配置,删除容器级的内存/CPU限制,直接使用任务级的配额即可,避免额外限制:
把任务定义的container_definitions里的"memory": 512, "cpu": 256两行删掉即可。 - 优化JVM启动参数,适配容器内存限制:
修改JAVA_OPTS环境变量,增加堆内存限制和容器适配参数:{ "name": "JAVA_OPTS", "value": "-Djava.util.logging.config.file=/var/jenkins_home/log.properties -Xmx1024m -Xms512m -XX:+UseCGroupMemoryLimitForHeap" } - 可选配置:如果需要持久化Jenkins数据,建议挂载EFS文件系统到
/var/jenkins_home路径,避免任务重启后配置和数据丢失。
内容的提问来源于stack exchange,提问作者Marcelo Tataje
相关产品推荐
相关产品推荐

