jmeter响应时间与我在日志文件中看到的差异

时间:2015-02-15 11:40:01

标签: java performance rest jmeter

我已经搜索了堆栈溢出,但没有找到任何我需要的东西,所以如果它重复,请告诉我,我将删除此帖子。

我有一个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上可能有问题,或者我真的需要担心我的服务?

提前感谢。


测试计划

Thread Group

HTTP Request

BeanShell PreProcessor

BeanShell PostProcessor

2 个答案:

答案 0 :(得分:1)

您的问题如下:

  • 您正在使用GUI模式
  • 您有一个查看结果树监听器

所以会发生的情况是,查看结果树监听器保存每个样本的结果,并且使用的内存不断增长导致越来越多的垃圾收集,然后是OOM。

你绝对应该读到这个:

快速修复:

  • 使用NON GUI
  • 仅使用“查看结果树”输出错误或只删除它

答案 1 :(得分:1)

检查延迟指标。根据{{​​3}}

  

延迟。 JMeter测量从发送请求之前到刚收到第一个响应之后的延迟。因此,时间包括组装请求以及组装响应的第一部分所需的所有处理,其通常将长于一个字节。协议分析器(如Wireshark)测量通过接口实际发送/接收字节的时间。 JMeter时间应该更接近浏览器或其他应用程序客户端所经历的时间。

所以Elapsed Time(JMeter告诉你的)是Response Time + Latency

我认为您遇到了JMeter Glossary指南中描述的情况。