Jmeter分布式压测不同线程场景及插件用法

1、jp@gc - Stepping Thread Group (deprecated)

参数说明

        This group will start:线程数,图中为100个线程

        First wait for:第一个线程延迟多久启动,上图是0秒

        Then start:初始加载多少个个线程,图中为0个

        Next,add:下次加载多少个线程,图中为10个

        Threads every:运行多久后再加载线程,图中为1s

        Using ramp-up:加载next线程的时间,图中为0s,即初始化情况下,0s内加载10个线程,然后每隔1s再加载10个,加载100个需要9s。

        Then hold load for:全部线程加载完毕后持续运行多久,单位s,上图是100个线程全部加载完毕,持续运行60s。即,100并发运行60s。

        Finally stop/threads every:多长时间停止多少线程,上图是在1s内停止10个线程,停止100个需要9s.

       Elapsed time:加载线程的时间9s+持续运行的时间60s+线程停止的时间9s=78s

Jmeter分布式压测不同线程场景及插件用法_第1张图片

cpu的随着线程增加逐步增加,当到达一定线程之后cpu在一定范围内波动展示

2、Ultimate thread group线程组

Ultimate thread group线程组是模拟波浪式压测

Start Threads Count :设置启用并发数

Initial Delay,sec:设置延迟时间,延迟多少秒开始

Startup Time,sec:设置启动时间,持续多少秒递增至启动

Hold Load For,sec:设置持续时间,要跑多少秒

Shutdown Time:设置结束时间,持续多少秒递减至关闭

Jmeter分布式压测不同线程场景及插件用法_第2张图片

可用于配置多个不用的线程组,和不同的线程数量

3、Synchronizing Timer:同步定时器

作用:也是用来设置集合点,阻塞线程,同步虚拟用户,直到指定的线程数量到达后,恰好在同一时刻执行任务,再一起释放,可以瞬间产生很大的压力。

Jmeter分布式压测不同线程场景及插件用法_第3张图片

Number of Simulated Users to Group by:集合点个数 (执行的线程数),如果设置为0,等于设置为线程租中的线程数量。

Timeout in milliseconds:指定线程数多少秒没集合到算超时(以毫秒为单位)。如果设置为0,该定时器将会等待线程数达到了"Number of Simultaneous Users toGroup"中设置的值才释放,不够的话就死等。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间后还没达到"Number of Simultaneous Users toGroup"中设置的值,Timer将不再等待,释放已到达的线程。默认为0

注意:

上面两个参数如果都设置了值,则在实际中是哪个条件先达到,定时器先执行哪个,如第一个参数释放线程数量先达到,则不会管超时时间的值,timer会释放;如果第二个参数超时时间先达到,则不会再等线程数量,按照目前超时的时间点集合的线程数,timer释放。

cpu展示图为先增加至最高点 再急速下降

Jmeter分布式压测不同线程场景及插件用法_第4张图片

4、Throughput Shaping Timer定时器

作用:用来模拟指定的系统吞吐量

参数说明:

Start RPS:RPS的起始值

End RPS:RPS的结束值

Duration,sec:持续时间,单位:秒

 添加吞吐量调整计时器以设置RPS计划。此计时器将自动延迟请求以达到我们的目标RPS负载水平

在平衡状态,或者说到达速度,尚未达到应用处理的瓶颈的时候: 并发 = rps * 响应时间

Jmeter分布式压测不同线程场景及插件用法_第5张图片

例图:在“每秒请求数”(RPS)计划区域中添加两行:

Jmeter分布式压测不同线程场景及插件用法_第6张图片

根据此元素,此测试的总持续时间应为120秒。

根据并发线程组,测试的持续时间应为2分钟。2分钟后脚本停止。这表明脚本在RPS计划完成后停止。

Jmeter分布式压测不同线程场景及插件用法_第7张图片

查看“每秒事务数”侦听器。未达到50 RPS的预期负载。10个虚拟用户每秒只能保留约21个请求。

线程池大小= RPS * / 1000

RPS是50。

Jmeter分布式压测不同线程场景及插件用法_第8张图片

“最大响应时间”为551ms。

线程池大小= 50 * 551/1000 = 27.55

5、逻辑控制器-吞吐量控制器

吞吐量控制器(Throughput Controller)用来控制其下元件的执行次数,并无控制吞吐量的功能。 作用:控制其下的子节点的执行次数与负载比例分配

吞吐量控制器字段介绍:

Total Executions:执行百分比(1-100)

percent Executions:执行数量

1、吞吐量控制器采用percent Executions 百分比控制, Throughput设为80,表示此吞吐量控制器按线程组线程总数的80%

Jmeter分布式压测不同线程场景及插件用法_第9张图片

本次压测效果图:(样本数量成比例展示)

Jmeter分布式压测不同线程场景及插件用法_第10张图片

2、勾选totalExecutions 是设置并发数量,表示只并发设置的数量。

Jmeter分布式压测不同线程场景及插件用法_第11张图片

效果图:

Jmeter分布式压测不同线程场景及插件用法_第12张图片

3、Total and Percent Executions组合使用

业务A使用Percent Executions, 并且勾选Per User

Jmeter分布式压测不同线程场景及插件用法_第13张图片

业务B使用Total Execution, 设置Throughput为3

Jmeter分布式压测不同线程场景及插件用法_第14张图片

运行看结果

Jmeter分布式压测不同线程场景及插件用法_第15张图片

从结果报告可以看出, 总线程组设置10个并发, 业务A选择percent Executions, 勾选per user, 并发数量是总线程的并发数

分布式压测时:

一、Jmeter做并发测试时,报错 java.lang.OutOfMemoryError:gc overhead limit exceeded报错

原因是jmeter默认分配内存的参数很小,256M吧。故而解决方法,就是增加内存。打开jmeter.bat文件,需要修改 jmeter.bat文件中内存 以适应更高的并发测试

1、windows环境下,修改jmeter.bat:

set HEAP=-Xms256m -Xmx256m

set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m

改为:

set HEAP=-Xms256m -Xmx1024m

set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m

根据经验,heap最多设置为物理内存的一半,默认设置为512M.如果heap超过物理内存的一半,可能运行jmeter会慢,甚至出现内存溢出,原因java比较吃内存,占CPU.

注意:JDK32位的电脑Xmx不能超过1500m,最大1378m.否则在启动Jmeter时会报错:

2、linux环境下,修改jmeter.sh:

java $JVM_ARGS -Xms1G -Xmx5G -XX:MaxPermSize=512m -Dapple.laf.useScreenMenuBar=true -jar `dirname $0`/ApacheJMeter.jar "$@"

3、如果查看JDK的位数

# java -version

java version "1.6.0_26"

Java(TM) SE Runtime Environment (build 1.6.0_26-b03)

Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)

如果是64位的话,最后一行会显示64-Bit

#java -version

java version "1.6.0_26"

Java(TM) SE Runtime Environment (build 1.6.0_26-b03)

Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

二、  jmeter分布式部署报   java.io.FileNotFoundException:rmi_keystore.jks异常 解决方法

原因:自JMeter 4.0以来,RMI的默认传输机制将使用SSL。SSL需要密钥和证书才能工作。你将不得不自己创建这些密钥。

a.点击jmeter/bin目录下create-rmi-keystore.bat

输入姓氏、单位、组织名称、国家等之后回车自动生成密钥,秘钥在bin目录下(注:远程压力机需要和施压机设置的秘钥口令一致。)

b:点击jmeter-server.bat, 启动RMI注册表

三、jmeter压力测试报错java.net.BindException: Address already in use: connect

排除问题:

首先先查看服务器的日志,发现没有报错。

然后查看nginx数据,发现请求数和测试发出的请求数不一致,服务器接收到的少,就想到丢失请求。

后来经过查找资料了解是windows 机器的问题,

原因:windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错。

解决办法(在jmeter所在服务器操作):

1.cmd中输入regedit命令打开注册表;

2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters;

3.添加一个新的DWORD,名字为MaxUserPort;

4.然后双击MaxUserPort,输入数值数据为65534,基数选择十进制;

5.完成以上操作,务必重启机器,问题解决。

解决后的测试结果就不再报错,但是增加线程数后又出现同样的问题,进行重复上述步骤再添加TcpTimedWaitDelay,数值为30-300 选择十进制。重启电脑生效

四、在运行时施压机与压测机器都打开 jmeter-server.bat文件,如果有内网域名指向时,施压机与压测机都配置hosts域名指向。

五、当脚本返回值有乱码,设置jmeter.bat中 脚本格式set FILEENCODING=-Dfile.encoding=UTF-8   在set ARGS最后面加上引用变量:%FILEENCODING%,

如果JMeter返回数据仍旧是乱码,在JMeter安装路径的bin目录下,打开文件jmeter.properties,把Sampleresult.default.encoding的值改为 utf-8 即可。

六、在施压机上运行jmeter-server.bat时,出现“Exception creating connection to:192.16.*.*;nested exception is:java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件)”错误

解决方案:修改apache-jmeter/bin/jmeter.properties 参数:server.rmi.ssl.disable=true

备注:将施压机和其他远程的机器上的jmeter.properties文件 参数server.rmi.ssl.disable均改为true

一、Jmeter进行性能测试时,如果并发数比较大,单台电脑的配置(CPU和内存)可能无法支持,或者本地网络带宽不足等,这时可以使用Jmeter提供的分布式测试的功能。

二、原理:

   1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。

   2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。

   3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总

三、jmeter配置:

   1.bin目录下 jmeter.properties文件配置:

       调度机(master): 258行 remote_hosts=127.0.0.1,192.168.103.43:1099,192.168.103.44   ----> xxx.xxx.xxx.xxx:1099 建议调度机不要配置自己,只作为控制机使用。

                   262行 server_port=1099    --->去掉#

                   300行 server.rmi.localport=1099   --->去掉#

                   334行 server.rmi.ssl.disable=true   --->去掉#

       执行机(slave):

                   258行  remote_hosts=本从机ip:1099   ----->同局域网内可配置 127.0.0.1

                   262行  server_port=1099

                   300行  server.rmi.localport=1099

                   334行  server.rmi.ssl.disable=true 

四、配置完成后, 从机 启动  jmeter.server

    若将主机(master)也作为从机(slave)使用则 主机(master)也需启动 jmeter.server

    liunx从机(slave)启动jmeter.server服务 ./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx (从机ip)  (直接./jmeter-server可能会启动失败)

五、注意事项:   

    1.主机添加 127.0.0.1便可将主机也作为从机使用

    2.从机只需添加本机ip(或不修改这部分)

    3.主机(Windows)启动 jmeter.server失败:liunx同理

      3.1 查看1099端口是否被占用:                              

         使用命令:netstat -aon|findstr 1099 找出占用1099端口的进程   关闭占用该端口的进程:taskkill -f -pid 3756

      3.2 controller的日志看bin目录下面的jmeter.log

        压力机的日志看bin目录下面的jmeter-server.log   

六、扩展:

   1.不在同一局域网如何进行分布式:

      只需要将从机jmeter.properties文件中 258行改为 remote_hosts=本从机ip:1099,其他配置同上即可调用。

      但不在同一局域网,可能因数据传输量过于巨大而导致jmeter卡死。

你可能感兴趣的:(Jmeter,jmeter,软件测试)