#jetty-9
#jetty-9
Вопрос:
Я использую сервер Jetty 9.4.15 для развертывания war в автономном режиме с Http2.
Настроено количество одновременных потоков jetty.http2.maxConcurrentStreams = 1000 вместо 128 по умолчанию. Это потому, что я получаю ошибку «слишком много одновременных потоков», поскольку у клиента больше потоков.
Приложение работает нормально, за исключением некоторых спорадических ошибок, как показано ниже в журналах сервера.
org.eclipse.jetty.io.EofException: Reset cancel_stream_error
at org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory$HTTPServerSessionListener.onReset(HTTP2ServerConnectionFactory.java:156) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Stream.notifyReset(HTTP2Stream.java:574) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Stream.onReset(HTTP2Stream.java:343) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Stream.process(HTTP2Stream.java:252) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Session.onReset(HTTP2Session.java:294) ~[?:?]
at org.eclipse.jetty.http2.parser.Parser$Listener$Wrapper.onReset(Parser.java:368) ~[?:?]
at org.eclipse.jetty.http2.parser.BodyParser.notifyReset(BodyParser.java:139) ~[?:?]
at org.eclipse.jetty.http2.parser.ResetBodyParser.onReset(ResetBodyParser.java:97) ~[?:?]
at org.eclipse.jetty.http2.parser.ResetBodyParser.parse(ResetBodyParser.java:66) ~[?:?]
at org.eclipse.jetty.http2.parser.Parser.parseBody(Parser.java:194) ~[?:?]
at org.eclipse.jetty.http2.parser.Parser.parse(Parser.java:123) ~[?:?]
at org.eclipse.jetty.http2.parser.ServerParser.parse(ServerParser.java:115) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Connection$HTTP2Producer.produce(HTTP2Connection.java:248) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produceTask(EatWhatYouKill.java:357) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:181) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) ~[?:?]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) ~[?:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) ~[?:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:834) [?:?]
Suppressed: java.lang.Throwable: HttpInput failure
at org.eclipse.jetty.server.HttpInput.failed(HttpInput.java:831) ~[?:?]
at org.eclipse.jetty.http2.server.HttpChannelOverHTTP2.onFailure(HttpChannelOverHTTP2.java:323) ~[?:?]
at org.eclipse.jetty.http2.server.HTTP2ServerConnection.onStreamFailure(HTTP2ServerConnection.java:219) ~[?:?]
at org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory$HTTPServerSessionListener.onReset(HTTP2ServerConnectionFactory.java:156) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Stream.notifyReset(HTTP2Stream.java:574) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Stream.onReset(HTTP2Stream.java:343) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Stream.process(HTTP2Stream.java:252) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Session.onReset(HTTP2Session.java:294) ~[?:?]
at org.eclipse.jetty.http2.parser.Parser$Listener$Wrapper.onReset(Parser.java:368) ~[?:?]
at org.eclipse.jetty.http2.parser.BodyParser.notifyReset(BodyParser.java:139) ~[?:?]
at org.eclipse.jetty.http2.parser.ResetBodyParser.onReset(ResetBodyParser.java:97) ~[?:?]
at org.eclipse.jetty.http2.parser.ResetBodyParser.parse(ResetBodyParser.java:66) ~[?:?]
at org.eclipse.jetty.http2.parser.Parser.parseBody(Parser.java:194) ~[?:?]
at org.eclipse.jetty.http2.parser.Parser.parse(Parser.java:123) ~[?:?]
at org.eclipse.jetty.http2.parser.ServerParser.parse(ServerParser.java:115) ~[?:?]
at org.eclipse.jetty.http2.HTTP2Connection$HTTP2Producer.produce(HTTP2Connection.java:248) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produceTask(EatWhatYouKill.java:357) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:181) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) ~[?:?]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) ~[?:?]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) ~[?:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) ~[?:?]
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:834) [?:?]
`
В клиентских журналах отображается приведенная ниже ошибка.
Client.Timeout exceeded while awaiting headers.
Клиент использует потоковую передачу вместо ожидания полного ответа. Я не уверен, почему эта ошибка возникает несколько раз. Время ожидания клиента настроено как 30 секунд, я проверил журналы приложений, где логика обработки приложений никогда не превышала 2 секунд.
Может ли кто-нибудь помочь мне в поиске основной причины этой проблемы?
Комментарии:
1. Смотрите также: github.com/eclipse/jetty.project/issues/3670
2. Это сигнализирует о том, что конец файла или потока был неожиданно достигнут во время ввода.