我有一个用Spring Boot编写的REST服务,它只有GET和POST方法。 GET / POST方法从/向cassandra集群检索/发布数据。 我尝试测试REST服务,同时运行100个用户。 我的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请求。
答案 0 :(得分:2)
使用此配置,您可以立即使用100个请求点击服务 。 每个请求都会得到一个请求线程,因此我假设您的服务有一个至少有100个连接线程的线程池。 每个请求线程都尝试从数据库连接池获取与DB的连接。如果50%的请求失败,我猜,您的数据库连接池大小设置为50.如果您的数据库连接池可以处理100个连接,请检查您的Cassandra数据库的连接设置,可能只限于50。
答案 1 :(得分:1)
在@Gerald的答案中添加更多内容。数据库中的线程池限制数可能不是唯一的罪魁祸首,其他可能性也是服务器级别中设置的最大线程连接数。如果您可以访问您尝试测试的api的服务器日志,那么您可以准确地获取它在哪些点上断开并在开发人员的帮助下修复它