当前位置: 首页 > 知识库问答 >
问题:

使用 jmeter 完成负载测试时,Tomcat 请求的意外最大响应时间

宰坚
2023-03-14

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

当我用500个线程从jeter运行测试10分钟时,我的最大时间约为3500毫秒。当我从jeter重复测试时,最大时间会减少到900毫秒。同样,如果我长时间运行测试,最大时间会再次增加到3500毫秒。

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

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

共有1个答案

颛孙庆
2023-03-14

你所说的“意外”是什么意思?重复测试时的响应时间较短可以通过您的应用程序实现来解释,例如,当您针对刚部署的应用程序启动负载测试时,其性能可能不是最佳的,当您重复测试时,缓存会“预热”,因此您的性能会更好。

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

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

 类似资料:
  • 我正在使用 JMeter 来测试 API endpoint的性能。应用的线程数(用户)为 100。当我第一次执行测试时,平均响应时间为 35345 毫秒,对于同一 API 终结点上具有相同线程数的所有后续测试,平均响应时间约为 4705 毫秒。 平均响应时间差异如此之大的原因是什么?JMeter 是否在第一次测试中缓存任何文件,并在所有后续测试中使用相同的缓存文件?如果是,我该如何避免这种情况?

  • 我制作了一些PHP脚本,我想测试JMeter中同时用户的响应时间。此脚本在很短的时间(50毫秒)内运行。 我想做的是模拟1到50个用户的负载测试,其中每个用户(线程)无限期地重复请求。首先我们将有一个用户,在两个同时的用户之后,在3个之后。。。等等 我正在尝试这样做,但我有一个响应时间,显然没有同时的请求。 使用HP loaddrunner,我们可以为每个线程定义迭代次数,这在JMeter中是否可

  • 问题内容: 我有一个Jmeter测试计划,希望我的HttpSampler发送一个发布请求。 请求的正文应包含Json,如下所示: 我已经设置了一个随机变量生成器,该变量生成器在每次调用时都返回格式正确的productId。我想做的是通过直接在请求主体中填充从生成器获取的随机pid的productId来生成有效负载。像这样(假设***是脚本转义符): 可能吗?如果是,怎么办?如果没有,您将如何处理该

  • 我已经在Asp中执行了负载测试。net应用程序使用JMeter。登录时,我收到“objectmovehere”消息作为响应。 在视图结果树中,我发现登录主采样器显示有两个子采样器。其中一个子采样器带有“物体移动到这里”消息。 在我的测试计划中,我处理了-CSS/JQUERY提取器来提取动态值“事件验证” 注意:登录功能请求除外 有人对此有什么解决办法吗?

  • 我如何负载测试一个同时有300个用户使用jmeter的登录页面(而不是一个又一个用户。同时有300个用户登录)?线程组的设置应该是什么?

  • 问题内容: 我有一个简单的代码,可为文本文件(url_list.txt)中列出的每个URL打印GET响应时间。 当顺序触发请求时,返回的时间对应于各个URL的预期响应时间。 但是,当同时执行相同的代码时,返回的响应时间通常比预期的要高。 看来我在http.Get(url)调用之前捕获的 time_start 并不是实际发送请求的时间。我猜http.Get(url)的执行排队了一段时间。 使用gor