【工具分享】Jmeter大文件分析利器,比官方快30倍的分析工具

背景 如今在企业内进行性能测试,Jmeter以其小巧灵活、简单易用、跨平台、扩展性强等特点,受到了越来越多人的欢迎,在行业内应用越来越广泛。 在使用Jmeter做性能测试时,需要注意的是,Jm...

背景

如今在企业内进行性能测试,Jmeter以其小巧灵活、简单易用、跨平台、扩展性强等特点,受到了越来越多人的欢迎,在行业内应用越来越广泛。

在使用Jmeter做性能测试时,需要注意的是,Jmeter界面只是用来做脚本创建和调试,真正压测时,一定要在No-GUI模式下进行。原因是GUI模式会带来Jmeter更多的性能损耗。测试结果不太准。

以下是Jmeter启动时,控制台上的提示信息

attachments-2018-06-ys4CFDXg5b1e13d0879bc.png

No-GUI模式就是通常所说的命令行模式,在Jmeter中把脚本创建好后,最终保存成一个.jmx的文件,然后在命令行下执行

jmeter -n -t demo.jmx -l result.jtl

执行结束后,最终测试结果会写到当前目录下的result.jtl中。

命令行模式的使用方法,网上相关资料很多,这里就不一一概述了。

 

自古以来,使用No-GUI模式进行压测,有一个最大的不便之处就是对于性能数据的统计和展示。

在通常情况下,我们可以通过以下几个方法进行统计

1、把生成的jtl文件下载到本地windows系统,然后用Jmeter中的聚合报告打开,聚合报告中会展示测试过程中最终的tps、响应时间、错误率等等。此方法的缺点是需要下载jtl文件,并且只能展示最终结果、不能展示各请求的性能曲线。

2、使用Jmeter命令行插件,对最终的jtl文件进行分析,也可以得到类似聚合报告的数据。此方法的优点是不用下载jtl了,直接在服务器上就能生成最终数据。缺点和第一种方法一样,不能展示性能曲线。

3、Jmeter3.0版本起,Jmeter自带了一个生成HTML报表的功能,功能强大,生成的报表中既包含了类似聚合报告中的最终汇总结果,还有各请求的性能曲线图,包括TPS、响应时间等等。命令为:jmeter -g test.jtl -o ./output(对test.jtl进行分析,生成的HTML报告存放在output目录下)

 

一般在工作中使用第三种方法居多,原因是性能测试不但要看最终的平均数据。整个过程中的性能波动大小也比较重要。如果某接口每隔2s TPS就降为0,下一秒TPS又恢复到1000,这种情况往往意味着系统性能存在问题。但如果只看最终tps平均值,很难发现此类问题的。

 

在使用Jmeter进行压测时,每一次请求的数据(包括请求时间、名称、响应码、响应信息、是否成功等等)都会记录到jtl文件中。也就是说你发了1w次请求,最终的jtl文件中会有1w条数据。

 

大多情况下,Jmeter自带的HTML报表功能已经能满足我们的需求。但是,此功能有一个比较大的缺陷,那就是性能比较差,换句话说就是分析很慢。TPS越高、执行时间越长、生成的jtl文件越大,分析的越慢。

 

在性能测试场景中,一般都会有一个稳定性场景,就是长时间的对系统进行压测,验证系统性能是否能够保持稳定。稳定性一般最少8个小时(也有24小时或3*24小时)。这种场景下,使用Jmeter生成的jtl文件会非常大。具体多大要看TPS和执行的时间。比如我曾经做过的一个稳定性测试,运行了24个小时,最终生成的jtl文件超过了10G10G的文件,用Jmeter来分析,几乎是个不可能完成的任务,几个小时未必能分析完。

 

JmeterHTML图表分析功能性能慢,主要是因为统计算法不够优化,其次是对数据的统计项分析太多。其实我们通常最关心的指标就是TPS、平均响应时间、tp90tp95tp99,错误率等。Jmeter除此之外,还对活动线程数、连接时间、各种维度的响应时间统计、字节数统计等等(Jmeter可以通过配置,减少数据的展示,但是分析时间并没有减少)。这些数据的分析也消耗了大量的时间,而在99%的情况下,我们并不关心这些数据。

 

时间就是生命啊,在实际工作中我也常常遇到此困扰,如何解决这个问题,提升工作效率呢?

于是乎利用工作之余,自己搞了一个Jmeter图表分析小工具。可以认为是低配版的Jmeter-HTML报表。但是核心性能数据都有。

 

相比Jmeter自带的HTML报表,它具备以下优点:

1、统计结果所需时间很短,速度比原生报表快将近30倍。

2、简化了一些不必要的性能数据统计,保留了核心性能数据,如,TPS统计、平均响应时间、90%95%99%响应时间、错误率,以及TPS曲线图、平均响应时间曲线图。

 

对比测试

我们先做一下对比测试,以下测试都是在同一台压力机上进行

压力机配置:1632G内存

Jdk版本:1.8

Jmeter版本:4.0

Jmeter配置统计间隔时间:5

 

1G文件分析测试

先选择一个1G大小的结果文件test2.jtl

attachments-2018-06-hTRS4yRC5b1e13f01f9c4.png

先使用Jmeter自带的HTML报表分析功能,为了方便统计分析时间,写了一个run.sh脚本,在调用Jmeter分析前后各打印了一下当前系统时间,结果如下

 

attachments-2018-06-wmI6g6Ev5b1e13fdf1b80.png

通过前后两次时间的打印,可以看到耗时为10分钟多。Jmeter会将HTML结果存放在指定的output目录下

attachments-2018-06-cmL7xptL5b1e140be878a.png

把生成的报表打包下载到windows下,打开index.html,我们看一下HTML报表中的核心性能数据

性能整体结果

attachments-2018-06-EVeLdh8e5b1e141890106.png

TPS曲线

attachments-2018-06-85Q5K9WJ5b1e142f62c35.png

平均响应时间曲线

attachments-2018-06-Ws6X6XeE5b1e144a3c249.png

 

接下来,使用相同的Linux服务器和jtl文件,使用自己开发的分析工具jmeter-graph.jar进行统计。

使用方法:java -jar jmeter-graph.jar 文件路径 统计时间间隔(秒)

文件路径是jtl文件的路径,不指定路径默认是在当前路径下

统计间隔时间TPS和响应时间曲线图中每隔多少秒展示一次时间,可根据不同的执行时间,选择合适的间隔时间,最小1秒,最大9999秒。通常设置为5秒就行。

注意:jdk版本必须在jdk1.7或以上

 

工具内部统计了耗时,从打印结果来看,整个分析过程耗时19

attachments-2018-06-ryZi6Smw5b1e145884fe1.png

Jmeter-graph工具会在当前目录生成一个JmeterGraph+时间戳的文件夹,文件夹内保存了本次分析的HTML结果

attachments-2018-06-T3QYt4ih5b1e145fe23d8.png

把生成的报表打包下载到windows下,打开index.html。我们来看一下HTML报表中的核心性能数据

整体性能数据

attachments-2018-06-8DbYKCbU5b1e1467760b8.png

TPS曲线图

attachments-2018-06-0LpITfgZ5b1e146d0febd.png

平均响应时间曲线图

attachments-2018-06-pifhX7uM5b1e14728a8bd.png

将两种方式生成的报表数据进行对比,无论是整体数据,还是曲线数据,两种方式的结果都是一样的(90%95%99%响应时间有微小差异,原因是百分比统计边界问题,对小数点的处理逻辑有差异)。

通过对比试验可以看出来,在相同的硬件环境下,Jmeter-graph工具比Jmeter自带分析功能快了30倍。

 

10G文件分析测试

之前的测试已经对比过数据精准度了,因此本次测试只对比耗时。

考虑到本次文件比较大,使用两种工具进行分析时,可能会导致内存泄漏,在分析前需要考虑Jvm参数的设置。

attachments-2018-06-KDAEPbZc5b1e148159779.png

attachments-2018-06-jF8i7OdC5b1e148c91807.png

先使用jmeter-graph工具进行分析,为了降低工具使用复杂度,工具执行时没有配置任何Jvm参数,Jvm会根据程序实际需要进行自动扩展。

可以看到,整个分析过程耗时208s,整个分析过程中工具本身使用的物理内存大概在4G左右。

 

然后再使用Jmeter自带功能对10G的文件进行分析,分析前先将Jmeterjvm内存设置为4G,然而在经过漫长的一个半小时的等待,最终结果还是Jmeter报内存泄漏而中止分析。

attachments-2018-06-mwEMI0TL5b1e1493c65ac.png

一怒之下,把Jmeterjvm最大内存设置为12G,重新进行分析,大概在1小时40分钟后,分析结束

attachments-2018-06-kT56xRn85b1e149b7e168.png

由此看来,要想用Jmeter分析10G的文件,必须给JmeterJvm内存分配大于10G,而jmeter-graph工具,大概需要4G内存

总结

1、对小于1G的文件进行分析,使用Jmeter自带功能就够了

2、大于1G或者更大的文件,可以使用jmeter-graph工具效率更高


注意

jtl文件必须是csv格式的才能使用本工具进行分析 


下载链接

https://pan.baidu.com/s/11o6uk15Ke8uvXKyK2Olo2Q

 

最后

以上就是jmeter-graph工具的使用方法,以及数据对比,分享给大家,希望能帮助大家提升工作效率。在使用过程中有任何问题,可以联系我QQ#364390717

  • 发表于 2018-06-11 14:20
  • 阅读 ( 1154 )

1 条评论

请先 登录 后评论
不写代码的码农
北河

性能测试从业者

15 篇文章

作家榜 »

  1. hey girl 181 文章
  2. 王前前 137 文章
  3. 柠檬 118 文章
  4. lamking 105 文章
  5. 云少 105 文章
  6. 腾讯移动品质中心TMQ 104 文章
  7. humortony 82 文章
  8. 开心的阳光 41 文章