从Jmeter jtl日志文件计算吞吐量

时间:2011-02-26 12:55:12

标签: jmeter

我试图根据以下参数,根据jtl日志中的一些属性,提出计算吞吐量(数量请求/时间单位)的公式:

  • 时间戳(ts)
  • 时间(t)
  • 总请求数

看看时间戳我不完全确定它是否是指发送请求的时间或收到响应的时间(我的主要困惑点在这里)。看一下这些值,第一种选择似乎更有可能。所以假设这个,我已经提出以下内容:

Throughput = (NumRequests / (max(ts + t) - min(ts)) ) * 1000

有谁可以告诉我,我是否对此?

更新(感谢@BlackGaff的回复)

关键是我需要执行我的测试并在非gui环境中为一些自动化进程收集结果,因此我无法真正使用聚合报告(除非有办法从命令运行它线)。使用max& min是尝试从一组请求中找到ts值(在同一测试中)。此外,如果我将采样器配置为具有不同于0的斜升时段(因此负载是分布式的),则我得到的ts的数字是不同的。是的,正如您之前提到的,我正在有效地寻找第一个样本的startTime和最后一个样本的endTime之间的差异。除此之外,我在jmeter.properties中找到了一个参数:

# Put the start time stamp in logs instead of the end
#sampleresult.timestamp.start=true

因此,根据此参数,我似乎也应该更改计算以获得开始和结束时间。

注意:我很好奇如何根据jtl文件计算这个,但如果有人需要从命令行获取这些数字,请尝试添加“生成摘要报告”监听器,并在jmeter日志中,您将获得在执行结束时类似于以下行:

2011/03/10 22:31:42 INFO  - jmeter.reporters.Summariser: Generate Summary Results =   200 in   9.8s =   20.5/s Avg:    95 Min:    75 Max:   315 Err:     0 (0.00%)

3 个答案:

答案 0 :(得分:5)

在Jmeter的Aggregate报告中打开JTL日志可能会更容易,它会为你计算吞吐量,然后将其保存回来吗?

但是,关于这个问题。

目前,您的公式包含时间/请求单位。鉴于您需要请求/时间,您的公式应为:

Throughput = (NumRequests / (max(ts + t) - min(ts) ) ) * 1000

我不完全确定你为什么使用max和min,因为你只提供一个值,而这些函数从一个集合返回最大值/最小值。鉴于TS是相同的值,使用EXCEL,您最终得到:

Throughput = (NumRequests/t*1000)

我相信你真正想要的是第一个样本的startTime和最后一个样本的endTime之间的区别)

根据词汇表:

  

吞吐量计算为   请求/时间单位。现在的时间是   从第一个开始计算   样品到最后一个样品的末尾。   这包括之间的任何间隔   样品,正如它应该的那样   表示服务器上的负载。该   公式为:吞吐量=(数量   请求)/(总时间)。

给出最终公式:

endTime = lastSampleStartTime + lastSampleLoadTime
startTime = firstSampleStartTime
converstion = unit time conversion value

Throughput = Numrequests / ((endTime - startTime)*conversion)

答案 1 :(得分:2)

  

关键是我需要执行测试并收集结果   一些自动化流程的非gui环境,所以我不能真的   使用聚合报告(除非有办法从中运行它   命令行)。

有。您可以使用JMeter Plugins项目中的CMD工具生成CSV格式的聚合报告。

http://jmeter-plugins.org/wiki/JMeterPluginsCMD/

答案 2 :(得分:0)

假设您要计算20个线程的吞吐量。以下是要遵循的步骤:

  1. 使用剩余的条目清理jtl文件仅用于20个线程。使用20个线程调用保存此文件。
  2. 使用以下命令

    获取时间戳的小时分钟
    # go to project directory and make a directory for the generated code
    cd ../standalone
    mkdir -p generated
    # compile the Frege code into generated/
    java -jar ../fregec.jar -d generated -O -make my/fine/App.fr
    # at this point, we could already run it, but had to supply fregec.jar
    # in the classpath.
    java -cp generated/:../fregec.jar my.fine.App
    # remove class files
    find generated/ -type f -name '*.class' -exec rm {} ';'
    # now generate minimal standalone code, the idea being that javac
    # gets the source files it needs automatically
    javac -d bin -sourcepath generated:../frege:../frege/build generated/my/fine/App.java
    java -cp bin my.fine.App
    # jar it up
    jar -cvf App.jar -C bin .
    jar -uvfe App.jar my.fine.App
    java -jar App.jar
    
  3. 运行以下命令以获取吞吐量/秒

    awk -F"[, .]" '{print $2}' summary.jtl > tps1