|Summary:||HTTP2 : GOAWAY sent with Protocol Error and Frame Size Error|
|Product:||Tomcat 9||Reporter:||Arshiya <arshiya.shariff>|
|Component:||Catalina||Assignee:||Tomcat Developers Mailing List <dev>|
Description Arshiya 2020-10-20 06:04:24 UTC
Created attachment 37512 [details] FRAME_SIZE_ERROR PCAP Sub-Component - Coyote OS : Redhat Linux Overview: Embedded Tomcat version 9.0.39 is implemented to transport http/2 packets between 2 systems (h2c connection). Http2 packets of payload size 55KB sent from the client are processed asynchronously . The content-type of request/response is application/json. For few requests Tomcat sends GOAWAY with reason that seems irrelevant . 1)GOAWAY with PROTOCOL ERROR : The content length header value  does not agree with the size of the data received  Where, both the content length header value and the size of the data received is 55295 bytes 2)GOAWAY with FRAME_SIZE_ERROR : The payload is  bytes long but the max frame size is  Where , the payload size is only around 55 KB Please find attached the PCAPs for reference. We have tried and reproduced these exceptions with a sample code implementing embedded tomcat version 9.0.39 with payload size of around 55KB . Please find below the steps to reproduce. I have attached the sample code / input JMX file to reproduce the issue. Steps to Reproduce: With JMeter as simulation client, on configuring 700 threads (700 connections) to connect towards Tomcat Server 9.0.39 embedded in our system and on sending 20 requests per second with payload of 55KB (same request with just one json value sent uniquely via the Random number generator)and on letting the test run in an infinite loop , few requests are getting timed out . On analysing the PCAP for the particular request we see that tomcat sends GOAWAY with PROTOCOL ERROR / FRAME_SIZE_ERROR where the reason seems to be incorrect. Client: JMeter 5.3 with additional HTTP2 sampler. No of threads: 700 Ramp-up period:10 seconds Loop:Infinite Payload size: around 55KB Constant Throughput Timer added to limit the tps to 20. Random Variable Generator added to the JSON request to uniquely identify for which request the exception is printed and to map it in the PCAP collected . Response Timeout : 5000 ms SERVER: Sample application attached . MaxThreads configured in tomcat is 200(all other parameters are the tomcat defaults). The input requests are processed asynchronously with 40 threads. Build: Embedded tomcat 9.0.39 Resolution/Clarification requested: Can you please explain the root cause for this . Thanks in advance.