Jmeter,jmeter-graph大文件分析利器详解

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

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

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

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

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

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

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

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

整体性能数据

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

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

10G文件分析测试

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

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

总结

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180613G0G73R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券