我已经搜索了堆栈溢出,但没有找到任何我需要的东西,所以如果它重复,请告诉我,我将删除此帖子。
我有一个Web应用程序,它是一个单独的REST服务,只能执行 Thread.sleep(10000)。如果该方法仅休眠10秒,我的所有请求的平均响应时间应为10-11秒,对吧?
要在JMeter上测试它,通常我使用200个线程并且5秒钟加速。测试开始时,我的平均响应时间保持在10秒,但在100次请求后,它开始增加,直到35-42秒。
我非常担心我的实现,所以我在我的方法的第一行添加了一个日期并打印一个日志,以便在它开始和结束时显示。所有日志信息显示请求的持续时间为10秒。
public Response go(@MultipartForm FileUploadForm form){
Date start = new Date();
try {
Thread.sleep(10000);
logger.info("Time " + sdf.format(start) + " - " + sdf.format(new Date()));
} catch (Exception e){
logger.error("Error:", e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
return Response.ok("OK").build();
}
我想知道为什么Jmeter会增加响应时间,而我的日志会显示我期待的时间。 Jmeter上可能有问题,或者我真的需要担心我的服务?
提前感谢。
测试计划
答案 0 :(得分:1)
您的问题如下:
所以会发生的情况是,查看结果树监听器保存每个样本的结果,并且使用的内存不断增长导致越来越多的垃圾收集,然后是OOM。
你绝对应该读到这个:
快速修复:
答案 1 :(得分:1)
检查延迟指标。根据{{3}}
延迟。 JMeter测量从发送请求之前到刚收到第一个响应之后的延迟。因此,时间包括组装请求以及组装响应的第一部分所需的所有处理,其通常将长于一个字节。协议分析器(如Wireshark)测量通过接口实际发送/接收字节的时间。 JMeter时间应该更接近浏览器或其他应用程序客户端所经历的时间。
所以Elapsed Time
(JMeter告诉你的)是Response Time
+ Latency
我认为您遇到了JMeter Glossary指南中描述的情况。