微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://blog.csdn.net/wangcheng15051862320/article/details/123614901

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐