【问题标题】:REST Service load test using Jmeter使用 Jmeter 进行 REST 服务负载测试
【发布时间】:2017-01-27 02:24:58
【问题描述】:

我有一个用 Spring Boot 编写的 REST 服务,它只有 GET 和 POST 方法。 GET/POST 方法从/向 cassandra 集群检索/发布数据。 我尝试用 100 个用户同时运行来测试 REST 服务。 我的 jmeter 配置是:

当我运行这个测试时,对于前几个请求,它会给出错误,而一半的请求是成功的。 这是结果表

然后我在结果树中查看了错误原因,发现了这个响应数据:

{"timestamp":1474278650822,"status":500,"error":"Internal Server Error","exception":"com.datastax.driver.core.exceptions.NoHostAvailableException","message":"org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (no host was tried)","path":"/post"}

我不明白为什么它在最初的几个请求中无法连接到 cassandra 集群。

我是 cassandra、REST 服务和 jmeter 的新手。谁能指出我犯了什么错误。 注意:我已经使用Postman 测试了我的 REST 服务,它的 GET 和 POST 请求都运行良好。

【问题讨论】:

    标签: spring rest spring-boot cassandra jmeter


    【解决方案1】:

    使用此配置,您一次会收到 100 个请求。 每个请求都会获得一个请求线程,因此我假设您的服务有一个至少有 100 个连接线程的线程池。 每个请求线程都尝试从数据库连接池中获取到数据库的连接。如果 50% 的请求失败,我猜你的数据库连接池大小设置为 50。如果你的数据库连接池可以处理 100 个连接,请检查 Cassandra DB 的连接设置,也许那个限制为 50。

    【讨论】:

    • 谢谢,我不知道池的大小。我会调查的。
    【解决方案2】:

    @Gerald 的回答还有很多要补充的。数据库中线程池的数量限制可能不是唯一的罪魁祸首,其他可能性也是服务器级别设置的最大线程连接数。如果您有权访问您尝试测试的 api 的服务器日志,您可以准确地了解它在什么时候中断并在开发人员的帮助下修复它

    【讨论】:

    • 我检查了运行我的休息服务的服务器,我发现了一些泄漏。我无法理解。
    • ERROR 4114 --- [tp1408652377-83] io.netty.util.ResourceLeakDetector : LEAK: You are creating too many HashedWheelTimer instances. HashedWheelTimer is a shared resource that must be reused across the JVM,so that only a few instances are created.
    • 那么答案是直截了当的,这个问题是由于共享资源的使用而发生的,并且您的测试服务器应该配置为 AsyncHttpClient 以支持对 Jmeter 的多个请求。在此之前,您的连接数将受到限制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多