Windows分布式部署
1、背景
以后大家如果是从事专职性能测试,一定要进行分布式压测;
场景:一台控制机和两台执行机,做分布式,要求控制机启动,两台执行机执行,反馈结果;
最贴近工作情况:
控制机:作为办公电脑,工作测试电脑
执行机:代理机,负载机: 可以直接用服务器的电脑;(服务器的电脑比较干净)肉鸡
jmeter分布式执行原理:
1.jmeter分布式测试时,选择其中一台作为控制机;其它机器作为代理机;
2.执行时,控制机会把脚本发送到每台代理机上,代理机拿到脚本后就开始执行,代理机执行时不需要启动jmeter界面,可以理解它是通过命令行模式执行的。
3.执行完成后,代理机会把结果回传给控制机,控制机会收集所有代理机的信息并汇总;
代理机配置:
1.代理机需要安装jmeter(并安装jdk)
2.启动代理机上的jmeter-server.bat文件;
3.多台代理及,重复1~3步;
配置:控制机ip和代理及IP,设置完运行即可;
2.安装环境变量
下载JDK,可以在oracle官网下载,也可以使用百度网盘下载
链接: 百度网盘 请输入提取码
提取码: p5gt
3.配置环境变量
将下载下来的JDk进行安装,添加JAVA_HOME
填写JDK存放路径(根据自己路径进行填写)
添加CLASSPATH
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
添加path,填写Jmeter存放路径(根据自己路径进行填写)
添加Path,将下面内容加在最后
%JAVA_HOME%\bin
%JAVA_HOME%\jre
4.修改Jmeter配置文件
配置:控制机ip和代理及IP,设置完运行即可;
1.配置代理机的ip和端口;
2.设置控制机:
3.进入Jmeter配置文件中D:/**/apache-jmeter-5.3/bin/jmeter.properties
server.rmi.ssl.disable=true # 将false改成true,去掉前面#号
5.启动分布式服务
1.在slave机(发压机)上启动客户端jmeter-server.bat
jmeter版本比较新,需要先执行create-rmi-keystore.bat,生成rmi_keystore.jks即可;
生成完成后直接启动ok
如下图看到slave已经启动。
2.控制机启动jmeter;
备注:
1.修改完端口后要重启jmeter;
2.分布式压测设定用户后,每台代理机都是运行的虚拟用户数;如果线程组中的虚拟用户数是500,若有两台负载机,则执行取样器的次数为500*2=1000次;
3.分布式压测,一定要在同一个局域网;
4.查看相关端口是否占用,查看防火墙是否关闭;
Linux内网环境分布式压测部署
1、背景
XX项目由于在私有云上部署,还未开放互联网,项目组决定在内网环境进行压测环境搭建,提前暴露内网环境下项目接口的性能瓶颈。
2、机器分配
内网环境机器,,通过堡垒机链接跳板机,,在通过跳板机链接20台内网机器进行操作,
一共分配了20台centos机器,部署两个集群,每个集群10台机器,一台控制机、10台压力机(控制机也做压力机)
3、压力机jmeter部署
3.1 jdk安装
1.由于是内网环境,无法通过yum源进行下载,需要通过xshell\xftp将文件先上传到跳板机,在通过跳板机上传到对应机器
2.解压jdk到指定目录,这里使用/usr/bin/java/目录
- /etc/profile添加环境变量
#java environment
export JAVA_HOME=/usr/java/jdk1.8.0_144
export CLASSPATH=.:JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=JAVA_HOME/bin
- 执行环境变量 source /etc/profile
- 验证jdk安装成功
java -version
3.2jmeter安装
- 在linux下建立安装路径:/root/jmeter
- 上传jmeter安装包到/root/jmeter路径下并解压
- 建立脚本目录:/root/jmeter/scripts,脚本上传的地址
- 建立报告目录:/root/jmeter/report,报告生成存放目录
5./etc/profile添加环境变量
#jmeter environment
export JMETER_HOME=/usr/local/apache-jmeter-5.4.3
export CLASSPATH=JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=PATH
- 执行环境变量 source /etc/profile
- 验证jmeter安装
jmeter -v
以上步骤在Master和Slaves 都进行操作相同的操作
3.3修改压力机配置参数
- 修改压力机slaves配置参数,在/root/jmeter/apache-jmeter-5.4.3/bin 目录下修改jmeter.properties文件
- 修改 server_port 端口
默认1009
可修改任意端口,但不能已被占用
- 修改 server.rmi.port 端口
和 server_port 保持一致即可
- 设置 server.rmi.ssl.disable
默认 false,代表需要认证
设置为 true,减少不必要的麻烦
- 修改 remote_hosts
remote_hosts=本机IP地址:端口号
- 系统在HOSTS文件中进行类似 本机IP 主机名的配置,如10.0.0.23 zhoucentos,否则启动jmeter server会报错!
首先,我们来查看本机ip和hostname
然后通过 vi /etc/hosts进行配置,将ip和hostname配置进去并保存。每台机器都配置
- 检查防火墙是否关闭
检查防火墙状态命令:systemctl status firewalld.service
- 环境优化
详见章节4
4. 环境优化
1)配置jmeter的使用内存,根据实际服务器和测试需求量来修改
vi /root/jmeter/apache-jmeter-5.4.3/bin/jmeter
166行修改
: "${HEAP:="-Xms8g -Xmx8g -XX:MaxMetaspaceSize=2048m"}"
bin目录下重启;
nohup jmeter-server -Djava.rmi.server.hostname=172.27.16.33 &
验证:
ps -ef | grep jmeter
2)优化linux内存参数 修改limits.conf文件,并添加:
#vi /etc/security/limits.conf
soft nofile 102400
hard nofile 102400
soft nproc 65535
hard nproc 65535
重新打开SSH终端,执行如下命令查看是否生效
ulimit -n
3)修改/etc/sysctl.conf文件,并添加:
vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 0
fs.file-max = 12553500
fs.nr_open = 12453500
kernel.shmall= 1048576
kernel.shmmax = 1887436
kernel.msgmax = 65536
kernel.sysrq = 0
kernel.pid_max= 65536
net.core.netdev_max_backlog = 2000000
net.core.rmem_default = 699040
net.core.rmem_max = 50331648
net.core.wmem_default = 131072
net.core.wmem_max = 33554432
net.core.somaxconn = 65535
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_mem = 1048576 1572864 2097152
net.ipv4.tcp_rmem = 4096 4194304 8388608
net.ipv4.tcp_wmem = 4096 4194304 8388608
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_window_scaling = 1
vm.swappiness = 0
#TCP connection recovery
net.ipv4.tcp_max_tw_buckets = 6000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.route.max_size = 5242880
net.ipv4.ip_forward = 1
#0表示不开启检查时间错,建议设置0
net.ipv4.tcp_timestamps = 0
#开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
#TCP connection manager
net.ipv4.tcp_max_syn_backlog = 655360
net.ipv4.tcp_syn_retries = 6
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 6
#TCP keepalive
net.ipv4.ip_local_port_range = 1025 65534
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
输入下面的命令,让内核参数生效:
sysctl -p
5.控制机部署
控制机jmeter部署和压力机一样(参考3.1、3.2)
修改控制机配置参数,在/root/jmeter/apache-jmeter-5.4.3/bin 下jmeter.properties文件
如果控制机也测试则加 ,然后修改 server_port 、 server.rmi.port、server.rmi.ssl.disable(和压力机一样步骤)
remote_hosts=压力机IP地址:端口号,压力机IP地址:端口号
多台可以用英文逗号分开,控制机也可以作为压力机
配置mode,去掉前面#
6.执行分布式压测脚本
在全部压力机上执行jmeter后台启动命令:
nohup jmeter-server -Djava.rmi.server.hostname=分压机ip &
任意目录执行全部压力机压测脚本
jmeter -r -n -t /root/jmeter/scripts/**.jmx
执行指定压力机压测(这里172.27.16.20为压力机ip)
sh jmeter -n -t /root/jmeter/scripts/XX.jmx -R 172.27.16.20
7.停止压测程序
cd 进入到JMeter 的 bin 目录下
输入 ./shutdown.sh 命令停止脚本
注:如果在分布式压测过程中,想要终止压测,千万不要在Linux上按 ctrl + c 强制终止程序,这样会知道主程序挂了之后,从机未接受到执行,会一直持续运行。当你再次从主机上运行脚本,从机仍然会在上一个脚本的程序中运行。
如果想要终止程序,可以执行命令行./shutdown.sh ,通知master终止程序,然后master 再去通知salve停止运行。
8.JMeter+Grafana+Influxdb
这里为了方便我们监控压测过程中的QPS、线程数、95分值,可以使用grafana控制面板来对数据进行展示我们将grafana部署在控制机上;
grafana的部署不在这里细讲,感兴趣的同学可以查看腾讯云的这篇文章;
JMeter+Grafana+Influxdb搭建可视化性能测试监控平台 - 腾讯云开发者社区-腾讯云