jmeter分布式压测笔记
作者:互联网
Jmeter学习笔记
jmeter分布式压测
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3fwDt6Wk-1647763131363)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214423332.png)]
实现原理
一台控制机搭配多台压力机,同时对服务器进行压力测试。压力机执行性能测试脚本,返回结果到控制机。控制机同时可以作为压力机
- Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
- 执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,它应该是通过命令行模式执行的。
- 执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
准备工作
- 主从机在同一个局域网下,保证能ping通,且在多网卡环境需要保证启动的网卡都在一个网段
- Master和Slave安装相同版本jmeter以及JDK
- 保证电脑运行的只有一个网卡(config只显示一个ip信息),如果多网卡要指定网卡通讯
- 关闭防火墙,如果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
标签:01,img,压测,server,分布式,jmeter,防盗链,图片 来源: https://blog.csdn.net/wangcheng15051862320/article/details/123614901