java - 启用 HTTP/2 的 Jetty 存在 CLOSE_WAIT 套接字问题
问题描述
我们正在使用带有 dropwizard 的 Jetty 9.4.40。我们正在尝试启用 HTTP/2,当我们启用 HTTP/2 支持时,应用程序可以正常运行 5 到 6 个小时,然后我们看到很多 CLOSE_WAIT 连接和 CPU 使用率上升。
Jetty 在 ELB 后面。当我们分析线程转储时,消耗高 CPU 的线程具有以下堆栈跟踪。
stackTrace:
java.lang.Thread.State: RUNNABLE
at org.eclipse.jetty.http2.parser.HeadersBodyParser.parse(HeadersBodyParser.java:225)
at org.eclipse.jetty.http2.parser.Parser.parseBody(Parser.java:198)
at org.eclipse.jetty.http2.parser.Parser.parse(Parser.java:127)
at org.eclipse.jetty.http2.parser.ServerParser.parse(ServerParser.java:115)
at org.eclipse.jetty.http2.HTTP2Connection$HTTP2Producer.produce(HTTP2Connection.java:261)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produceTask(EatWhatYouKill.java:360)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:184)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135)
at org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:183)
at org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:138)
at org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:361)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:540)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:395)
at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:161)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.Invocable.invokeNonBlocking(Invocable.java:69)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.invokeTask(EatWhatYouKill.java:348)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:303)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036)
at java.lang.Thread.run(Thread.java:748)
对此的任何帮助将不胜感激。
解决方案
推荐阅读
- swift - 如何获取 JSON 响应并通过它进行解析
- python - 我无法让我的播放器跳转,即使代码与工作示例非常相似
- reactjs - 抽屉屏幕内的全屏地图导致抽屉项目按下滞后
- wolfram-mathematica - 使用单位三角形制作面积为 1 的三角形
- python-3.x - 如何使 LED 闪烁并同时更改形状的填充颜色?
- c++ - 未检测到空指针
- java - 如何在 JavaFX [CSS] 中更改选定 RadioButton 的颜色?
- python - Webhook 端点 - 处理许多并发请求
- c# - 如何查询PNG的位深度?
- javascript - 用数字名称调用 JSON 对象?