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

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

转载自  http://ask.testfan.cn/article/1275  

因为怕丢,所以转载过来了,请原博主见谅

背景

如今在企业内进行性能测试,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文件超过了10G,10个G的文件,用Jmeter来分析,几乎是个不可能完成的任务,几个小时未必能分析完。

 

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

 

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

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

 

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

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

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

 

对比测试

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

压力机配置:16核32G内存

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的文件进行分析,分析前先将Jmeter的jvm内存设置为4G,然而在经过漫长的一个半小时的等待,最终结果还是Jmeter报内存泄漏而中止分析。

attachments-2018-06-mwEMI0TL5b1e1493c65ac.png

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

attachments-2018-06-kT56xRn85b1e149b7e168.png

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

总结

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

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

 

下载链接

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

 

最后

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