jmeter分布式压测笔记

Jmeter学习笔记

jmeter分布式压测

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3fwDt6Wk-1647763131363)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214423332.png)]

实现原理

一台控制机搭配多台压力机,同时对服务器进行压力测试。压力机执行性能测试脚本,返回结果到控制机。控制机同时可以作为压力机

  1. Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
  2. 执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,它应该是通过命令行模式执行的。
  3. 执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

准备工作

  1. 主从机在同一个局域网下,保证能ping通,且在多网卡环境需要保证启动的网卡都在一个网段
  2. Master和Slave安装相同版本jmeter以及JDK
  3. 保证电脑运行的只有一个网卡(config只显示一个ip信息),如果多网卡要指定网卡通讯
  4. 关闭防火墙,如果Windows系统作为master,Linux系统的服务器作为slave,还需要注意master和slave的防火墙是否已经关闭,Linux系统的服务器关闭防火墙命令:
systemctl stop firewalld
systemctl status firewalld
systemctl disable firewalld
systemctl enable firewalld

配置JDK环境变量

vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_221
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATHJAVA_HOME CLASSPATH

查看jdk版本:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-344eHyZ4-1647763131366)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214543986.png)]

配置jmeter环境变量

vi /etc/profile 输入:

export PATH=/usr/local/apache-jmeter-5.4.1/bin/:$PATH

source profile

查看jmeter版本

jmeter -v

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjxNCNm9-1647763131367)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214559952.png)]

配置Master

修改 jmeter.properties

在主控机的jmeter的bin目录下修改配置文件:jmeter.properties

cd /usr/local/apache-jmeter-5.4.1/bin
vi jmeter.properties
remote_hosts=ip:port (多个压力机之间用“,”隔开)
remote_hosts=192.168.0.103:1099,192.168.0.104:1099,192.168.0.105:1099

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a7oRmG2i-1647763131368)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214642034.png)]

server.rmi.localport=1099
#JMeter 4.0开始,RMI的默认传输机制将使用ssl。SSL需要密钥和证书才能工作,不使用ssl将存在安全漏洞
server.rmi.ssl.disable=true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxiHMYIc-1647763131369)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214812654.png)]

启动master的 jmeter-server服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4xKXZipQ-1647763131370)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214823215.png)]

#指定本地IP
./jmeter-server -Djava.rmi.server.hostname=192.168.0.103

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BacDiGHp-1647763131370)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214836014.png)]

配置Slave

修改 jmeter.properties

通修改master一样,打开linux里jmeter的bin目录的jmeter.properties文件

server_port=1099
server.rmi.localport=1099
server.rmi.ssl.disable=true

命令启动Slave的jmeter-server

jmeter-server -Djava.rmi.server.hostname=IP ,启动 anget 节点。jmeter-server 后面的参数指定 agent 的 IP

例:

cd /usr/local/apache-jmeter-5.4.1/bin
jmeter-server -Djava.rmi.server.hostname=192.168.0.103
jmeter-server -Djava.rmi.server.hostname=192.168.0.104
jmeter-server -Djava.rmi.server.hostname=192.168.0.105

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32WpY5gT-1647763131371)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214900158.png)]

如果发现端口被占用,可以用命令杀死进程,再启动

【Linux】

查找端口进程的PID

# 查找进程PID
netstat -tlnp | grep 1099
 
# 杀死进程
kill -9 PID

【Mac】

# 查看8080端口占用情况
sudo lsof -i :8080
 
# 杀死进程
sudo kill -9 653

【Windows】

# 通过端口查看进程,获取对应PID
netstat -ano|findstr  8080
 
# 根据PID查询哪个程序或进程占用了端口
tasklist|findstr  2668
 
# 结束该进程
taskkill /f /t /im TIM.exe
或
taskkill /f /t /im  2668

如果发现master上时区和slave上的Linux时区不一致,主要修改Linux时区

# 修改时区命令
timedatectl set-timezone "Asia/Shanghai"
 
# 查看
date -R

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HlrmypMo-1647763131372)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214920723.png)]

Slave机器jmeter jvm调优

为了掠尽所有执行机的硬件和网络资源,加强执行机的发压能力,还需要对每台执行机进行深度jmeter jvm调优(修改jmeter.bat中jmeter的内存参数,从512m调整为合适大小)

vi打开jmeter.sh文件

一般而言,堆的最大值不要超过物理内存的一半,否则容易导致jmeter运行变慢、卡顿甚至内存溢出(因为java本身的垃圾回收机制是动态分配内存,

调整时候其本身会占用很多内存),NEW分配的内存,不宜太大!

这里默认值为

JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh etc.

改为:

JVM_ARGS="-Xms512m -Xmx4096m" jmeter.sh etc.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDNSlil4-1647763131373)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214937856.png)]

修改日志级别

进入jmeter安装目录下的bin目录

找到log4j2.xml文件

可以设置以下日志级别:fatal, error, warn, info,debug,其中fatal打印日志最少,debug级别日志最详细

运行稳定测试时,如果jmeter-server.log打印过多,容易占满磁盘,这种情况下容易影响性能,所以我们可以设置日志级别到最高(fatal),这样级别不会打印什么日志内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zZG84bQO-1647763131374)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214955153.png)]

非GUI模式运行

命令运行

jmeter -n -t test.jmx -R 192.168.0.103,192.168.0.104 -l test.jtl
或
jmeter -n -t test.jmx -r -l test.jtl
[root@localhost ~]# cd /usr/local/apache-jmeter-5.4.1/scripts
[root@localhost scripts]# ll
总用量 8
-rw-r--r--. 1 root root 6510 10月  7 13:39 test.jmx
[root@localhost scripts]# jmeter -n -t test.jmx -r -l test.jtl
Creating summariser <summary>
Created the tree successfully using test.jmx
Configuring remote engine: 192.168.0.104:1099
Using local port: 1099
Configuring remote engine: 192.168.0.105:1099
Starting distributed test with remote engines: [192.168.0.105:1099, 192.168.0.104:1099] @ Thu Oct 07 13:55:20 CST 2021 (1633586120719)
Remote engines have been started:[192.168.0.105:1099, 192.168.0.104:1099]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary =     10 in 00:00:01 =    8.8/s Avg:    69 Min:    18 Max:   202 Err:     0 (0.00%)
Tidying up remote @ Thu Oct 07 13:55:41 CST 2021 (1633586141552)
... end of run

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqCZpFMZ-1647763131374)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215012623.png)]

参数

n:非gui运行

t:指定测试脚本

R:指定多少个 agent 启动并参与测试

r: 代表全部 agent 启动并参与测试

l:生成测试结果文件

查看测试结果

打开test.jtl文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IRcWAuIG-1647763131375)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215028001-16471794285961.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RPUvmXCc-1647763131376)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215041299.png)]

命令运行并同时生产Report

参考文章:https://www.cnblogs.com/zibinchen/p/12373183.html

jmeter -n -t test.jmx -R 192.168.0.103,192.168.0.104 -l test.jtl  -e -o tableresult
或
jmeter -n -t test.jmx -r -l test.jtl  -e -o tableresult

远程负载机控制台打印信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IHtPrJ1B-1647763131377)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215056850.png)]

查看测试报告

打开 tableresult/index.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8CoUMVUx-1647763131379)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215111169.png)]

非GUI模式运行设置

使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死

所以一般采用的方式是 在GUI模式下调整测试脚本,再用命令行模式执行

修改 jmeter.properties

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.latency=true
jmeter.save.saveservice.response_code=true
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.timestamp_format=ms
jmeter.save.saveservice.timestamp_format=yyyy-MM-dd HH:mm:ss
jmeter.save.saveservice.print_field_names=true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upYTyizn-1647763131380)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215133969.png)]

改成中文

language=zh_CN

终端运行jmx生成测试报告

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6YJI0jwm-1647763131381)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215158350.png)]

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
#例如
# jmeter -n -t test.jmx -r -l test2.jtl  -e -o tableresult

通过jtl文件用命令生成HTML报告

 jmeter -g [results file] -e -o [Path to web report folder]
 jmeter -g test.jtl -e -o D:\dev\apache-jmeter-5.4.1\scripts\result

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ouLZWyg-1647763131382)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215221232.png)]

问题总结

如果有参数化文件,需要拷贝到每台负载机上,路径要一样,而windows和linux上路径肯定是不一样的,所以,负载机要么都是windows,要么都是linux

1:控制机启动远程负载机 Connection timed out: connect

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIWFKr6e-1647763131382)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215236628.png)]

停止 远程服务器防火墙,解决问题

systemctl stop firewalld
systemctl status firewalld
systemctl disable firewalld

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5IDCHZm-1647763131383)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215256729.png)]

2.启动远程负载机 Engine is busy - please try later

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KsoWdJL9-1647763131384)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215308864.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C9JZyTPo-1647763131384)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215317647.png)]

3.启动 Master server报错

[root@localhost bin]# ./jmeter-server
Using local port: 1099
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:1099](local),objID:[-4b9578e:17c5947e1e0:-7fff, -3839917855539262043]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.
[root@localhost bin]# ./jmeter-server
Using local port: 1099
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:1099](local),objID:[-71db0819:17c59491b17:-7fff, 8627898156653717994]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnJ3vvk7-1647763131385)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313215330944.png)]

解决方法:

#指定本地IP
./jmeter-server -Djava.rmi.server.hostname=192.168.0.103

:17c59491b17:-7fff, 8627898156653717994]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.


[外链图片转存中...(img-wnJ3vvk7-1647763131385)]

解决方法:

```shell
#指定本地IP
./jmeter-server -Djava.rmi.server.hostname=192.168.0.103
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter分布式压测是使用多台计算机同时执行JMeter测试计划,以模拟大量并发用户的压力。使用分布式压测可以有效提高负载能力,并避免单台机器的性能限制。在分布式压测中,一个JMeter主控节点负责管理所有的测试计划和生成结果报告,而多个JMeter工作节点则同时执行测试计划,并将结果返回给主控节点进行统计和分析。 要进行JMeter分布式压测,需要进行以下步骤: 1. 配置JMeter主控节点:在主控节点上,设置一个JMeter测试计划,并将其配置为分布式测试模式。在测试计划中,设置各个线程组、取样器和监听器等测试元素,以模拟真实的用户行为。 2. 配置JMeter工作节点:在每个工作节点上,安装并配置JMeter,并确保与主控节点在同一局域网中。工作节点需要拥有相同的测试计划文件和测试数据。 3. 启动主控节点:在主控节点上启动JMeter,并开始压测。主控节点会将测试计划和相关配置发送给各个工作节点,并收集并分析结果。 4. 启动工作节点:在每个工作节点上启动JMeter,并连接到主控节点。工作节点会接收主控节点发送的测试计划和相关配置,并执行测试计划。 5. 监控和分析结果:在压测过程中,可以通过主控节点的监听器查看实时结果,并在压测结束后生成详细的报告进行分析。 以上是JMeter分布式压测的基本流程。通过合理配置和管理分布式压测环境,可以更好地模拟真实的用户场景,评估系统的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值