开启HTTP/2的Jetty出现大量CLOSE_WAIT套接字及CPU升高问题求助
问题根因定位
你遇到的是Jetty 9.4.40版本HTTP/2模块的已知缺陷:HeadersBodyParser在解析特定畸形HTTP/2头帧时会进入无限循环,直接导致CPU使用率持续跑高,且对应的连接无法正常释放,最终堆积大量CLOSE_WAIT状态连接。
解决思路
1. 优先方案:升级Jetty版本
该解析逻辑缺陷已经在Jetty 9.4.41及后续稳定版修复,直接升级即可彻底解决问题:
- 如果使用Dropwizard官方绑定的Jetty版本,选择适配Jetty 9.4.44+的Dropwizard版本升级
- 若暂时无法升级全量Dropwizard,可单独在依赖管理中覆盖Jetty相关组件的版本到9.4.44及以上稳定版,注意要保证所有Jetty组件版本一致,避免兼容性问题
2. 临时规避方案(无法升级时使用)
- 调整ELB负载均衡配置:开启HTTP/2帧校验规则,限制头帧大小、头字段数量,过滤畸形请求后再转发到后端Jetty服务
- 调整Jetty HTTP/2参数:配置
maxHeaderListSize、maxFrameSize为合理阈值(比如maxHeaderListSize设为8192),避免异常输入触发解析逻辑缺陷 - 开启Jetty连接空闲超时:设置
idleTimeout为30s以内,自动释放长时间无活动的连接,减少CLOSE_WAIT的堆积 - 若业务允许,可临时关闭HTTP/2支持,改用HTTP/1.1协议,待版本升级完成后再重新开启HTTP/2
验证建议
升级或调整配置后,可通过以下方式确认问题已修复:
- 持续监控CPU使用率,确认运行超过12小时无异常飙升
- 监控TCP连接状态,确认CLOSE_WAIT连接数不会持续增长
- 模拟畸形HTTP/2请求测试,确认服务不会出现CPU占满、连接泄漏问题
内容的提问来源于stack exchange,提问作者Naveen N
相关产品推荐
相关产品推荐

