Blazemeter / jmeter-http2-plugin

HTTP2 plugin for Apache JMeter
Apache License 2.0
45 stars 27 forks source link

Non HTTP response message: java.nio.channels.AsynchronousCloseException #65

Closed dpeddaswamy closed 8 months ago

dpeddaswamy commented 8 months ago

Hi Team, During load test execution of Micro services with h2 protocol, getting below error message. Could you please help in resolving the issue. Jmeter version: 5.5 with Normal Thread group and Blazemeter http/2 plugin in version: 2.0.2.

Non HTTP response code: java.util.concurrent.ExecutionException/Non HTTP response message: java.nio.channels.AsynchronousCloseException

Below is the response body received. java.util.concurrent.ExecutionException: java.nio.channels.AsynchronousCloseException at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:113) at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:96) at com.blazemeter.jmeter.http2.core.HTTP2JettyClient.send(HTTP2JettyClient.java:238) at com.blazemeter.jmeter.http2.core.HTTP2JettyClient.sample(HTTP2JettyClient.java:210) at com.blazemeter.jmeter.http2.sampler.HTTP2Sampler.sample(HTTP2Sampler.java:60) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1301) at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1290) at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.nio.channels.AsynchronousCloseException at org.eclipse.jetty.http2.client.http.HttpConnectionOverHTTP2.close(HttpConnectionOverHTTP2.java:199) at org.eclipse.jetty.http2.client.http.HTTPSessionListenerPromise.onClose(HTTPSessionListenerPromise.java:96) at org.eclipse.jetty.http2.client.http.HTTPSessionListenerPromise.onClose(HTTPSessionListenerPromise.java:91) at org.eclipse.jetty.http2.api.Session$Listener.onClose(Session.java:260) at org.eclipse.jetty.http2.HTTP2Session.notifyClose(HTTP2Session.java:1153) at org.eclipse.jetty.http2.HTTP2Session$StreamsState.terminate(HTTP2Session.java:2091) at org.eclipse.jetty.http2.HTTP2Session$StreamsState.lambda$sendGoAwayAndTerminate$16(HTTP2Session.java:2001) at org.eclipse.jetty.util.Callback$6.completed(Callback.java:223) at org.eclipse.jetty.util.Callback$Nested.succeeded(Callback.java:396) at org.eclipse.jetty.util.Callback$Nested.succeeded(Callback.java:392) at org.eclipse.jetty.http2.HTTP2Session$ControlEntry.succeeded(HTTP2Session.java:1334) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.eclipse.jetty.http2.HTTP2Flusher.finish(HTTP2Flusher.java:323) at org.eclipse.jetty.http2.HTTP2Flusher.succeeded(HTTP2Flusher.java:315) at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:291) at org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:254) at org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:386) at org.eclipse.jetty.http2.HTTP2Flusher.process(HTTP2Flusher.java:292) at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:232) at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:214) at org.eclipse.jetty.http2.HTTP2Session.frame(HTTP2Session.java:777) at org.eclipse.jetty.http2.HTTP2Session.frames(HTTP2Session.java:749) at org.eclipse.jetty.http2.HTTP2Session.control(HTTP2Session.java:731) at org.eclipse.jetty.http2.HTTP2Session$StreamsState.sendGoAway(HTTP2Session.java:2006) at org.eclipse.jetty.http2.HTTP2Session$StreamsState.sendGoAwayAndTerminate(HTTP2Session.java:2001) at org.eclipse.jetty.http2.HTTP2Session$StreamsState.lambda$onGoAway$4(HTTP2Session.java:1717) at org.eclipse.jetty.http2.HTTP2Session$StreamsState.tryRunZeroStreamsAction(HTTP2Session.java:2080) at org.eclipse.jetty.http2.HTTP2Session$StreamsState.onStreamDestroyed(HTTP2Session.java:2021) at org.eclipse.jetty.http2.HTTP2Session.onStreamDestroyed(HTTP2Session.java:1050) at org.eclipse.jetty.http2.HTTP2Session.removeStream(HTTP2Session.java:888) at org.eclipse.jetty.http2.HTTP2Stream.processData(HTTP2Stream.java:530) at org.eclipse.jetty.http2.HTTP2Stream.onData(HTTP2Stream.java:489) at org.eclipse.jetty.http2.HTTP2Stream.process(HTTP2Stream.java:377) at org.eclipse.jetty.http2.HTTP2Session.onData(HTTP2Session.java:262) at org.eclipse.jetty.http2.HTTP2Connection$ParserListener.onData(HTTP2Connection.java:407) at org.eclipse.jetty.http2.parser.BodyParser.notifyData(BodyParser.java:103) at org.eclipse.jetty.http2.parser.DataBodyParser.onData(DataBodyParser.java:145) at org.eclipse.jetty.http2.parser.DataBodyParser.emptyBody(DataBodyParser.java:55) at org.eclipse.jetty.http2.parser.Parser.parseBody(Parser.java:189) at org.eclipse.jetty.http2.parser.Parser.parse(Parser.java:122) at org.eclipse.jetty.http2.HTTP2Connection$HTTP2Producer.produce(HTTP2Connection.java:278) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produceTask(AdaptiveExecutionStrategy.java:446) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:239) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:190) at org.eclipse.jetty.http2.HTTP2Connection.produce(HTTP2Connection.java:208) at org.eclipse.jetty.http2.HTTP2Connection.onFillable(HTTP2Connection.java:155) at org.eclipse.jetty.http2.HTTP2Connection$FillableCallback.succeeded(HTTP2Connection.java:378) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:558) at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:379) at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:146) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100) at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:412) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:381) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:268) at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.lambda$new$0(AdaptiveExecutionStrategy.java:138) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:407) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038) ... 1 more

3dgiordano commented 8 months ago

Hi @dpeddaswamy

I think the problem seems to be that the server sends a GOAWAY message and disconnect the http client. It's something we don't fully support yet, but we added some handling in version 2.0.3. GOAWAY support requires different connection handling and requires disconnection and reconnection logic.

I recommend using version 2.0.5 which has several fixes to problems released in version 2.0.3/2.0.4.

Try using that version and let us know if it handles the issue better.

There is a problem with how Jetty releases those connections in the GOAWAY state, which can be solved alternatively by incorporating a short time into the idle timeout.

dpeddaswamy commented 8 months ago

Hi David, Issue resolved after updating v2. 0.5

Thank you for your support..

On Tue, 17 Oct, 2023, 11:10 pm David, @.***> wrote:

Hi @dpeddaswamy https://github.com/dpeddaswamy

I think the problem seems to be that the server sends a GOAWAY message and disconnect the http client. It's something we don't fully support yet, but we added some handling in version 2.0.3. GOAWAY support requires different connection handling and requires disconnection and reconnection logic.

I recommend using version 2.0.5 which has several fixes to problems released in version 2.0.3/2.0.4.

Try using that version and let us know if it handles the issue better.

There is a problem with how Jetty releases those connections in the GOAWAY state, which can be solved alternatively by incorporating a short time into the idle timeout.

— Reply to this email directly, view it on GitHub https://github.com/Blazemeter/jmeter-http2-plugin/issues/65#issuecomment-1766876653, or unsubscribe https://github.com/notifications/unsubscribe-auth/A5US7GXLWGJ6CLYHHIRGBZLX727HHAVCNFSM6AAAAAA6DGPRZSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONRWHA3TMNRVGM . You are receiving this because you were mentioned.Message ID: @.***>

3dgiordano commented 8 months ago

Thanks @dpeddaswamy for letting us know. I close this issue. Any other issue do not hesitate to create a new one.

Regards.