3

I am trying to hit my Spring Boot Server(2.1.4) with 500 user threads using JMeter(5.0). while trying this I got the error in JMeter log file which is about 1% of the Samples. Spring Boot server is connecting to aws services .

Unable to execute HTTP request : Couldn't Kickstart Handshaking

Both the JMeter and SpringBoot Server is Running on AWS EC2 instance (m5a.2xlarge)

Note: When I run Jmeter and Spring Boot Server in different instance Error got reduced to 0.1%

  • JDK - openjdk version 11

while logging in the spring boot server we got this Exception Details

This shows aws sdkclient exception.Do we need to change anything awsclient configuration or its problem with our spring boot-server?

Sanjeev Kumar
  • 135
  • 2
  • 2
  • 13
  • looks like your application is trying to make too many connections or reconnecting too fast to the AWS service. So you probably will have to redesign your applicaiton logic using the AWS service. – P.J.Meisch Dec 28 '19 at 07:39
  • But we have increased the max connections to 1000 in the aws client configuration.So 500 threads can easily make connections to the aws service. – Sanjeev Kumar Dec 28 '19 at 19:01
  • what AWS service are you accessing? Can it be that this service has some limit on the connections? – P.J.Meisch Dec 29 '19 at 10:59
  • we are accessing QLDB service. I didn't see any document mentioning limits on connection. – Sanjeev Kumar Dec 30 '19 at 09:40

1 Answers1

2

It might be due to TLS protocol versions mismatch, if you have the same application working fine on one AWS instance and doesn't working on another you can add the next line to system.properties file (lives in "bin" folder of your JMeter installation)

javax.net.debug=ssl

and compare the output for both instances, it should enable SSL debugging hence give you a clue regarding what is the cause of the error.

Blind shot: try explicitly setting TLS protocol version for both JMeter and your Spring Boot application

  1. JMeter: add the next line to user.properties file:

    https.default.protocol=TLS
    https.socket.protocols=TLSv1
    
  2. Your application: add the next JVM arguments:

    -Djdk.tls.client.protocols=TLSv1.3
    -Dhttps.protocols=TLSv1.3
    

References:

Dmitri T
  • 159,985
  • 5
  • 83
  • 133
  • 1
    The original post says that only some connections fail, and the proportion of failures decreases when more resources can be dedicated. If this were a configuration problem, then either all connections would succeed or all would fail. This is likely due to some kind of throttling or connection limit. – Richard J. Smith Sep 30 '20 at 20:43