Jmeter性能压力测试

Jmeter

最近做了性能测试相关的工作使用到了jmeter,记录一下自己的学习过程,分享一些个人的理解。

因为JMeter是使用JAVA写的,所以使用JMeter之前,要先安装jdk。

Jmeter的安装很简单,官网下载地址 http://jmeter.apache.org/

Jmeter性能压力测试

就是一个包解压出来运行bin目录下的jmeter.bat就可以了。

首先可以先设置一下语言。

Jmeter性能压力测试

Jmeter的使用

一般是先添加线程组:

Jmeter性能压力测试

再给这个线程组加上HTTP请求:

Jmeter性能压力测试

再加上一些监听器用来显示压测结果:

Jmeter性能压力测试

Jmeter性能压力测试

然后就是线程数这些的配置,先说简单的,如果设置是这样的:

Jmeter性能压力测试

意思是5秒内开启5个线程(每秒开启一个),每个线程请求两次,一共就是10个请求。

然后到HTTP请求配置:

Jmeter性能压力测试

然后就可以运行了。运行结果:

Jmeter性能压力测试

Jmeter性能压力测试

Jmeter性能压力测试

运行的结果就是按你设置的参数。每秒发送2个请求。

进阶篇

想要固定每秒请求多少次,是可以通过“线程数、“Ramp-Up time”、 “循环次数”这三个参数来配置的。

Jmeter性能压力测试

简单总结就是:总请求数 = 线程数 * 循环次数,每秒请求数 = 总请求数 / ramp-up

但是想要这样按照你配置来跑,最终真的实现每秒请求数,是有前提的,那就是:被性能测试的整套系统每秒能处理的个数大于你配的每秒请求数。
比如下图测试的线程数100、 ramp-up是10秒、循环次数500:按上面说的那总请求数是50000,每秒请求个数5000

Jmeter性能压力测试

但测试结果是:

Jmeter性能压力测试

一共花了5分钟左右才执行完,仔细看吞吐量这一栏只有180。在jmeter中这个吞吐量代表的就是每秒处理请求数。所以配置是10秒内跑完。但实际上是用了5分钟,说明这一套系统达不到jmeter本次任务配置的要求。也说明这套系统在某处有瓶颈(网络、代理、项目代码、CPU性能、数据库、用来跑jmeter压测的机器本身性能都可能是瓶颈),接口的最大每秒处理数是180。

这里解释一个概念,对新手来说,很多人直接简单地认为线程数多少个就是每秒多少并发,一上来就设置100个线程数,ramp-up为1,循环次数1。然后跑出这个结果:

Jmeter性能压力测试

没毛病,这个的确是100个请求一秒内处理完了,然后设置更多,5000个线程,ramp-up为1,循环次数1。

Jmeter性能压力测试

以上结果是直接对某个项目接口压测跑出来的,没有报错但是花了2秒,(一般这种设置不是直接测接口而是走网络再到代理(比如nginx转发)再到接口的话基本都会报错,而且不会是在1秒内跑完的。)这种测试方法根本就是错误的,在jmeter里最主要的性能指标就是看吞吐量(上图中throughput),吞吐量代表了这套系统每秒能处理多少个请求。

Jmeter性能测试任务压力不断增加,并不是一味的加线程,线程过大过小都不好,应该根据实测试验能达到最大吞吐量的线程才是最好。我如果把参数改成如下:10秒内开启100线程,没有设置循环次数(我理解的就是让jmeter*发挥,能压多少请求就尽量压多少,直到某处出现瓶颈)

Jmeter性能压力测试

运行结果是:

Jmeter性能压力测试

吞吐量throughput一秒钟能处理3万多个(被压力测试的服务器),说明直接测项目的接口每秒可以请求3万多个(本次jmeter压测任务将执行6000秒也就是10分钟)。而配置开5000个线程的结果,反而会大幅降低吞吐量,是因为CPU在不断的切换线程去处理请求,性能都消耗在了切换线程上面。

所以一般想要测试一个系统(同前面说的一样,包括服务器和运行jmeter的机器还有网络带宽在内,整体算一个系统)某个接口的最大吞吐量就是这样配置:

Jmeter性能压力测试

而前面简单的使用循环次数的方式其实就相当于用那几个参数配一个目标吞吐量让jmeter去压测,整个系统的性能可以达到这个目标,就能按你配的吞吐量跑,达不到就只能按最大的吞吐量慢慢执行完。

并发的概念

市东头有一座桥,可以支撑80辆车同时在桥面通行,桥面没有坡度,没有坑洼,且桥两端的路况极好,每辆车通过桥面的平均时间是30秒。 市西头也有一座桥,也可以支撑80辆车同时在桥面通行,但是桥面年久失修,坑坑洼洼,桥两边的路况也不是很好,每辆车通过桥面的平均时间是2分钟。那么请问东桥和西桥能支撑的最大并发数一样吗?

最大并发数:理论上桥面能支持同时行驶的车辆数量,假设车距在保证安全的情况最短,且车密度一致。

吞吐量:该路段1秒最多能通过的车辆数量。

平均响应时间:每辆车通过桥面的平均时间

 

结论:

1.并发数 东桥西桥一样等于80

2.TPS(Transactions Per Second每秒传输的事物处理个数) = 并发数/平均响应时间。 东桥:80/30 西桥80/120

在Jmeter里吞吐量就是TPS,所以系统性能的强弱不是看并发数。而是看TPS。