【问题标题】:Unable to execute HTTP request : Couldn't Kickstart Handshaking无法执行 HTTP 请求:无法 Kickstart 握手
【发布时间】:2019-12-27 13:22:10
【问题描述】:

我正在尝试使用 JMeter(5.0) 使用 500 个用户线程来访问我的 Spring Boot Server(2.1.4)。在尝试此操作时,我在 JMeter 日志文件中发现错误,该错误约占样本的 1%。 Spring Boot 服务器正在连接到 aws 服务。

无法执行 HTTP 请求:无法 Kickstart 握手

JMeter 和 SpringBoot 服务器都在 AWS EC2 实例 (m5a.2xlarge) 上运行

注意:当我在不同的实例中运行 Jmeter 和 Spring Boot Server 时,错误减少到 0.1%

  • JDK - openjdk 版本 11

这显示 aws sdkclient 异常。我们是否需要更改任何 awsclient 配置或其与我们的 spring boot-server 的问题?

【问题讨论】:

  • 看起来您的应用程序正在尝试建立太多连接或重新连接到 AWS 服务的速度太快。因此,您可能必须使用 AWS 服务重新设计您的应用程序逻辑。
  • 但是我们在 aws 客户端配置中将最大连接数增加到了 1000。所以 500 个线程可以轻松连接到 aws 服务。
  • 您访问的是什么 AWS 服务?难道是这个服务对连接有一些限制?
  • 我们正在访问 QLDB 服务。我没有看到任何文件提到连接限制。

标签: spring-boot amazon-ec2 jmeter aws-sdk


【解决方案1】:

这可能是由于TLS 协议版本不匹配,如果您有相同的应用程序在一个 AWS 实例上运行良好而在另一个 AWS 实例上运行不正常,您可以将下一行添加到 system.properties 文件(位于 JMeter 安装的“bin”文件夹中)

javax.net.debug=ssl

并比较两个实例的输出,它应该enable SSL debugging 因此为您提供有关错误原因的线索。

盲测:尝试为 JMeter 和 Spring Boot 应用程序显式设置 TLS 协议版本

  1. JMeter:将下一行添加到 user.properties 文件:

    https.default.protocol=TLS
    https.socket.protocols=TLSv1
    
  2. 您的应用程序:添加下一个 JVM 参数:

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

参考资料:

【讨论】:

  • 原帖说只有部分连接失败,当更多的资源可以专用时,失败的比例会降低。如果这是一个配置问题,那么要么所有连接都成功,要么全部失败。这可能是由于某种限制或连接限制造成的。
猜你喜欢
  • 2022-08-02
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多