You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS应用负载均衡器首次请求返回502,请求结果交替异常求助

循环出现502/200请求的排查与解决

核心排查方向

从你描述的交替502/200现象来看,大概率是负载均衡器(ALB)与后端SpringBoot应用的连接复用不匹配,或者目标组健康检查配置异常导致的。以下是具体排查和解决步骤:


  1. 先查ALB访问日志,定位502根因
    开启ALB的访问日志(存储到S3),重点看502请求对应的字段:

    • target_status_code为-:说明ALB根本没连上EC2实例,可能是连接被后端主动关闭或超时
    • error_reason字段:直接显示错误原因,比如Target closed connection(后端提前关闭连接)、Connection timeout(连接超时)
      这一步能直接缩小问题范围,确定是网络层还是应用层的问题。
  2. 检查目标组健康检查配置

    • 确认健康检查路径是否正确:如果用SpringBoot的/actuator/health,要确保actuator依赖已引入且端点正常暴露
    • 调整健康检查参数:如果健康检查间隔太短、超时时间过短,可能导致ALB误判实例状态,交替标记为健康/不健康,从而出现循环502/200
    • 查看目标组的Target health状态,确认是否存在状态交替切换的情况
  3. 对齐ALB与Tomcat的连接超时配置
    ALB默认的闲置连接超时是60秒,而你设置的Tomcatkeep-alive-timeout是300秒,两者不匹配会导致ALB先关闭闲置连接,但Tomcat还保留着该连接,下次请求复用已关闭的连接就会触发502,重新建立连接后恢复正常:

    • 方案一:在AWS控制台把ALB的闲置连接超时调整为300秒(与Tomcat配置一致)
    • 方案二:补充Tomcat的max-keep-alive-requests配置,默认值100,超过该次数Tomcat会关闭连接,调大后可避免频繁断连:
      server.tomcat.connection-timeout=300000
      server.tomcat.keep-alive-timeout=300000
      server.tomcat.max-keep-alive-requests=1000
      
  4. 验证直接访问EC2的情况
    绕过ALB,用EC2公网IP直接访问80端口的API,看是否还会出现循环502/200:

    • 如果不会:问题肯定在ALB或目标组配置
    • 如果会:排查SpringBoot应用本身,比如是否存在请求线程池耗尽、定时任务导致的资源波动等问题
  5. 检查目标组连接复用设置
    目标组默认开启连接复用(Connection reuse),如果后端Tomcat的keep-alive配置异常,会导致复用的连接失效。可以尝试临时关闭目标组的连接复用,验证是否解决问题(不建议长期关闭,会影响性能)


内容的提问来源于stack exchange,提问作者Ali Siddiqui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:48:19