2016-09-19 90 views
0

我有一个用Spring Boot编写的只有GET和POST方法的REST服务。 GET/POST方法从cassandra集群中检索/发布数据。 我试着同时运行100个用户测试REST服务。 我JMeter的配置是:REST使用Jmeter的服务负载测试

No of users 当我运行这个测试,最初的几个要求它提供错误和半请求成功。 这里是 Result table

然后我检查错误的原因在结果树,发现这个响应数据结果表:

{"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请求。

回答

2

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

+0

谢谢,我不知道池的大小。我会研究它。 – hmachahary

1

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

+0

我检查了我的服务器在哪里,我的休息服务正在运行,我发现了一些泄漏。我无法理解它。 – hmachahary

+0

'错误4114 --- [tp1408652377-83] io.netty.util.ResourceLeakDetector:LEAK:您正在创建太多的HashedWheelTimer实例。 HashedWheelTimer是必须在整个JVM中重用的共享资源,以便只创建少量实例。“ – hmachahary

+0

然后,答案很简单,由于共享资源的使用情况以及您的测试应该为AsyncHttpClient配置的服务器以支持对Jmeter的多重请求。在此之前,您的连接数量将受到限制 –