百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

个人收藏用-Jmeter-分布式压测傻瓜式配置及常见问题的解决

csdh11 2024-12-20 14:08 4 浏览

一、为什么要做分布式?

1、Jmeter 本身的局限性

· 一个 Jmeter服务默认最大支持 1000 左右的并发用户数(线程数),再大的话,容易造成卡顿、无响应等情况,这是受限于Jmeter 其本身的机制和硬件配置(内存、CPU等)

· 由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现 JAVA内存溢出的错误,导致测试脚本本身就有瓶颈

2、JVM 堆内存的局限性
java 应用的 jvm 堆内存 heap 受压力机硬件限制,虽然我们可以调整堆内存大小

cmd 启用 Jmeter GUI 时,也会有提示

increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file

翻译:增加 Java 堆内存来满足测试的要求

3、联想场景

· 测试 5000 并发的场景,但单机只能支持 1000 并发无法达到 5000

· 通过分布式(5 台机器起)可以模拟 5000 并发

但是单机无法支撑数以万计大并发,此时,需要多个压力机进行分布式压力测试,这样性能瓶颈就不会是我们的压力机了

4、分布式压测
Jmeter 支持分布式压测,将需要模拟的大量并发用户数分发到多台压力机,使 Jmeter 拥有更大的负载量,满足真实业务场景(高并发场景)

5、分布式的最终目的

· 确保压力机不会出现性能瓶颈

· 在后面进行性能分析时,不需要考虑压力机是否会导致性能瓶颈的主要原因之一

二、Jmeter分布压测的原理

1、Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。
2、执行时,Controller会把脚本发送到每台Agent上,Agent 拿到脚本后开始执行,Agent执行时不需要启动Jmeter,只需要把jmeter服务启动(Windows:jmeter-server.bat/Linux:jmeter.sh),是通过命令行模式来执行的。
3、执行后,Agent会把结果回传给Controller,Controller会收集所有Agent的信息并汇总。

先杀个原理图:



这个图说明的是要一台控制机,然后由这台控制机发压测脚本到每台远程执行机,然后由控制机收集执行机结果

首先,在我们开始之前,有几件事要检查:
1.系统上的防火墙已关闭或打开了正确的端口。
2.所有客户端都在同一子网中。
3.如果使用192.xxx或10.xxx IP地址,则服务器位于同一子网中。如果服务器不使用192.xx或10.xx IP地址,则应该没有任何问题。
4.确保JMeter可以访问服务器。
5.确保在所有系统上使用相同版本的JMeter和Java。混合版本将无法正常工作。
6.您已经为RMI设置了SSL或将其禁用。


三、环境准备及配置

Jmeter安装包和JAVA jdk 安装包自行下载:

Jmeter官网链接:https://jmeter.apache.org/download_jmeter.cgi
Java_jdk官网链接:
https://www.oracle.com/technetwork/java/javase/downloads/index.html

(下面以CMP消费升级性能测试环境配置为例进行说明)

客户端

IP地址

主从

配置环境

Windows server

xx.xx.xx.187

Master(控制机)

4CPU,8G、Jmeter 5.1.1、java version "11.0.4" 2019-07-16 LTS

Centos7

xx.xx.xx.89

Slave(执行机)

24CPU,32G、Jmeter 5.1.1、java version "11.0.4" 2019-07-16 LTS

Centos7

xx.xx.xx.89

Slave(执行机)

24CPU,32G、Jmeter 5.1.1、java version "11.0.4" 2019-07-16 LTS

Centos7

xx.xx.xx.71

Slave(执行机)

4CPU,8G、Jmeter 5.1.1、java version "11.0.4" 2019-07-16 LTS

Centos7

xx.xx.xx.71

Slave(执行机)

4CPU,8G、Jmeter 5.1.1、java version "11.0.4" 2019-07-16 LTS


这里简单介绍一下Jmeter的bin目录下的文件:

# bin:是核心可执行文件,目录下常用文件配置有:

jmeter.bat: windows启动文件:

jmeter: mac或者linux启动文件:

jmeter-server:mac或者Liunx分布式压测使用的启动文件

jmeter-server.bat:mac或者Liunx分布式压测使用的启动文件

jmeter.properties: 核心配置文件

examples:压测脚本文件JMX和动态读取csv参数文件案例

result—template:可视化HTML

template:JMX的模板文件

四、执行机slave配置

在本地slave机器的根路径下的etc目录下,找到一个为hosts的文件,在文件中添加DNS域名解析配置



配置完成后使用source使配置生效

在本地slave机器的Jmeter的bin目录下,找到一个为jmeter.properties的文件,在文件内容中找到remote_hosts字段,添加远程控制机的IP地址,端口默认是1099(可以根据需要改成其他可用的端口)。






注意:如果执行机的性能特别好,只起一台jmeter服务完全不会对执行机的性能造成压力,那可以在一台执行机上安装多个jmter(版本是同一个,复制多个,修改为不同的名称),启用不同的端口。因为单台jmeter服务的性能上限为1000左右。



对应命令:

1、输入Sudo su ,进入root权限

2、输入 cd /app/install/jmeter/apache-jmeter-5.1.1/bin/ ,进入jmeter的bin目录

3、输入vim jmeter.properties,编辑jmeter.properties配置文件(hosts文件类似),点击键盘上的“insert”键进入编辑模式,修改远程机IP和端口(执行机的远程机对应的是调度机),编辑完成后点击键盘上“esc”键退出编辑模式

4、输入 :!wq 保存并退出。

5、输入nohup ./jmeter-server -Djava.rmi.server.hostname=10.201.22.93 &,启动jmeter服务。

如果要启动多个jmeter服务,则分别进入到不同的jmeter文件夹下的bin目录,运行启动命令。

6、输入ps -ef|grep jmeter-server,查看已经启动的jmeter服务。

7、输入kill -9 `ps aux | grep jmeter | grep -v grep | awk '{print $2}'`,杀掉所有的jmeter进程

五、调度机master配置

master机与slave机器的配置相似,同样在Jmeter的bin目录下,找到一个为jmeter.properties的文件,在文件内容中找到remote_hosts字段,添加slave机IP和端口。如果有多台执行机或者1台执行机上有多个jmeter服务(使用不同的端口启动jmter服务),这里需要把所有的执行机的IP地址和端口号都加入进来。



配置完了启动master机的jmeter.bat服务,打开jmeter。

注意:每次修改配置后需要重启jmeter加载最新最新的配置信息。

六、master运行分布式测试

1、添加线程组,编辑线程数,设置1个线程数,循环1次,这里只做示例



2、添加http请求



3、添加察看结果数和聚合报告,点击运行,可以选择远程启动或者远程全部启动,如果是点击远程启动,可以选择任意一台电脑来运行,如果是点击远程全部启动就会运行所有的代理机



4、这里以点击远程全部启动为例。运行结束后,查看聚合报告,每台电脑设置的线程数为1,这里一共是4个jmeter服务,所以是4个线程数。



5.jmeter分布式测试中master机的测试结果响应数据为空,原因是:
分布式测试中,通过远程启动代理服务器,注重的而是高并发,默认查看结果树中的响应数据为空,只有错误信息会被报回。
如果想要结果返回,直接把bin\jmeter.properties文件中的 mode=Standard 之前的 # 号去掉,重启jmeter即可




6、Dos命令窗口使用命令行运行jmeter

命令样式:jmeter -n -t 【jmeter脚本路径】 -r -l 【日志路径】 -e -o 【生成报告的路径】

命令示例:

jmeter -n -t C:\Users\hwu\Desktop\PerformanceScript\CMP\PerformanceScriptOfConsumptionUpgrade.jmx -r -l C:\Users\hwu\Desktop\PerformanceScript\CMP\report\JTL\hunhe-10000-120s-16.jtl -e -o C:\Users\hwu\Desktop\PerformanceScript\CMP\report\ReportOfNoGUI\hunhe-10000-120s-16

执行结果:





生成的报告是以文件夹的方式,文件夹内包含相应的数据



Jmeter进行分布式测试时需要特别注意的

1)如果使用csv进行参数化,需要把参数文件在每台slave上拷贝一份,最好都放置在bin目录下,因为Jmeter会直接从bin目录下查找;

2)slave机器执行脚本时,若断言执行成功则在master机器上是看不到请求响应数据的,只有在断言出错时才可键slave的返回;

3)若要使用Jmeter分布式进行测试,TCP取样器中“TCPClient classname”该栏必须填写对应的协议;

4)以十六进发送tcp数据包时,TCP取样器中“End of line(EOL) byte value”必须填写数据包的结束符,否则jmeter会一直等待,无响应。

七、Jmeter分布式测试常见问题

问题1:
远程启动slave机器时,如出现“Jmeter nested exception is:java.net.ConnectException connection timed out:connect ”错误

解决方案:

1)查看slave上的ip与master配置文件中的ip是否一致;

如果不一致,查看slave机器上是否有虚拟网卡,将网卡关闭,在此启动Jmeter-server.bat,查看是否正确

2)查看防火墙是否关闭

注:centos7上关闭防火墙:

firewall-cmd --state //查看防火墙状态

systemctl stop firewalld.service //关闭防火墙

问题2:
当设置csv文件路径时,如果路径不对,无响应

解决方法:
将csv文件以“相对路径”命名,即将csv文件直接放入bin目录下,在Jmeter路径中直接写入文件名

问题3:
(Linux)默认端看1099被占用,如何关闭某个被占用端口的方法

1)netstat -ntlp //查看当前所以tcp端口

nestat -ntulp |grep 1109 //查看所有1109端口使用情况

2)lsof -i:1109 //查看占用1109端口的程序pid

3)kill -9 1109 //kill掉该进程

(windows)上关闭已被占用的端口

如1099端口被占用:1)在cmd命令行下输入以下命令:netstat -aon|findstr "1099",回车之后就可以看见列表中的PID,然后根据PID在电脑的任务管理器中查看对应的占用程序,然后将其关闭即可;2)然后根据查询的PID找到对应的进程,我们可以看到占有1099这个程序的进程ID,如:5264,继续输入命令【tasklist|findstr "5264"】,5264就是进程ID,现在知道是哪个进程占用的我们的端口,即可在任务管理器中杀掉该进程。

问题4:
如果使用slave发送数据后,长时间无响应

问题排查:

1)查看发送的数据中是否存在csv参数文件,查看slave机器的bin目录下是否有该文件;

2)查看建立的tcp采样器中属性“TCPClient classname”处是否添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

相关推荐

15个最好的性能测试工具(软件测试工程师必备)

在软件测试日常工作中,大家接触得比较多的性能测试工具有LoadRunner和Jmeter,这里整理了web应用程序性能和负载压力能力的最广泛使用的性能测试工具的综合列表。...

JMeter关联陌生又熟悉 jmeter re-use connection

JMeter关联是什么JMeter关联,这几个字看着可能会有点陌生,实际上却是工作中经常会做的一件事情,尤其是接口自动化,它指的是把一个接口的响应作为另一个接口的参数,从而...

jmeter汇总报告分析 jmeter总结

背景考验网站的不仅仅是数据的正确性,还有更重要的是灵活快速的交互,高并发的处理能力等。那么我们就需要对网站的整体的处理能力有更进一步的了解,以便来通过诸如集群,分布式,更换硬件等方式来提高网站处理能力...

收下这份实操案例,还怕不会用Jmeter接口测试工具

JMeter简介JMeter,一个100%的纯Java桌面应用...

Apifox--比 Postman 还好用的 API 测试工具

读者提问:有没有一款工具是集API文档、API调试、APIMock、API自动化测试四种功能为一身的?...

Jmeter之Bean shell使用(二) jmeter中beanshell的定义与引用

 上一篇Jmeter之Beanshell使用(一)简单介绍了下Jmeter中的Beanshell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求。本节内容...

如何服务端调优与JVM调优? 服务端运行环境为jvm

目录一、安装Jmeter二、压测三、服务端调优四、线上问题分析(一)问题分类(二)问题排查...

Jmeter与压测相关概念 jemeter压测

RT(responsetime)什么是RT?RT就是指系统在接收到请求和做出相应这段时间跨度但是值得一提的是RT的值越高,并不真的就能说明我们的系统的吞吐量就很高,比如说,如果存在数据在网络中传...

性能测试:JMeter参数化 jmeter的参数化

jmeter参数化  在实际的测试工作中,我们经常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件的功能。这种测试方式在业界称为数据驱动测试,而在实际测试工作中,测试工具中实现不同...

JMeter 集群环境搭建指南 - 实现高效的压力测试

JMeter是一款非常受欢迎的压力测试工具,但是在大规模压力测试时,单机运行已经无法满足需求了。为了提高负载能力,我们需要搭建JMeter集群。下面,我们来看具体的做法。...

2022年十大接口测试工具合集 好用的接口测试工具

接口测试的全称是应用程序编程接口(API)测试,从原理上来说,接口测试是模拟客户端向服务器端发送请求,然后检查能否获得正确的返回信息。接口测试用于测试RESTfulAPI、SOAPWeb服务,这些...

阿里性能专家全方位对比Jmeter和Locust,到底谁更香?

本文章出自【码同学软件测试】码同学公众号:自动化软件测试码同学抖音号:小码哥聊软件测试...

性能测试工具JMeter的使用 使用jmeter进行两个接口关联测试

熟练掌握一款性能测试工具,是我们必备的一项技能。他不仅可以帮助我们模拟测试场景(包括并发、复杂的组合场景),还能将测试结果转化成数据或图形,帮助我们更直观地了解系统性能。jmeter简介...

JMeter做性能测试,用jdk17和jdk8,哪个性能更好呢?

现在企业做接口性能测试,大多还是会用JMeter,而JMeter是用java开发的、开源项目,所以,JMeter依赖java运行环境。目前,jdk已经发布了多个新版本,主推的是jdk17。推荐它的一个...

基于JMeter的性能压测平台实现 jmeter压测分析

这篇文章已经是两年前写的,短短两年时间,JMeter开源应用技术的发展已经是翻天覆地,最初由github开源项目zyanycall/stressTestPlatform形成的这款测试工具也开始慢...