0

我有一个 spring boot 应用程序,它有一个 post 端点,它接受请求并将其发送到另一个服务并获取响应并将其保存到 mongo 数据库并将响应返回给用户。该应用程序部署在 Spring Boot 的嵌入式 tomcat 上。我正在使用 jmeter 查看最大响应时间、吞吐量等。

当我从 jmeter 运行 500 个线程的测试 10 分钟时,我得到的最大时间约为 3500 毫秒。当我从 jmeter 重复测试时,最大时间减少到 900 毫秒。同样,如果我在很长一段时间后运行测试,最大值再次上升到 3500 毫秒。

我无法获得有关 tomcat 的这种行为的任何信息。

你能帮我理解tomcat的这种行为吗?

4

1 回答 1

0

“意外”是什么意思?重复测试时响应时间较短可以通过您的应用程序实现来解释,例如当您开始对刚刚部署的应用程序进行负载测试时,它的性能可能不是最佳的,并且当您重复测试时缓存被“预热”所以你得到了更好的表现。

另一种解释可能是JIT 优化,因为 JVM 正在分析您的应用程序使用模式,并对字节码进行内部改进以更好地服务于给定的负载模式。

第三种可能的解释是MongoDB 缓存,如果 500 个用户发送相同的响应,则可能是数据库将结果集存储在内存中,当您重复测试时,它实际上并没有访问存储,而是直接从内存返回结果这是快速和便宜的。考虑正确参数化您的 JMeter 测试,以便每个线程(虚拟用户)使用自己的凭据并执行与其他线程不同的查询,但请记住,测试需要可重复,因此不要每次都使用唯一数据,最好有足够的预定义测试数据集

于 2020-05-05T08:47:21.203 回答