为什么要分布式
- jmeter是100%纯java开发的程序,虚拟用户是以线程实现的,在大量并发情况下,很容易出现CPU、内存消耗过大的问题,甚至会出现java内存溢出。
- 一般一台电脑设置500-600线程数即可,如果超过1000线程,单机电脑就有点过高了,同时也还要关注本机电脑CPU、内存不能超过80%~90%的范围,否则会导致测试机本身的性能瓶颈,测试结果也会不准确。
分布式测试原理
- 总控机器的节点Jmeter controller,其他产生压力的机器叫“肉鸡”(Jmeter server)
- controller会把脚本发送到Jmeter server上,肉鸡不需要准备jmx文件
- 执行的时候,server上只需要把jmeter-server打开就可以了,不用启动jmeter
- 执行结束后,server会把压测数据回传给controller,然后controller汇总输出报告
- 注意:必须保证主机和肉鸡安装相同的jdk和jmeter
环境部署
- 准备机器:
- 安装示例:
# 所有机器都需要安装
apt-get update --fix-missing # 更新源
apt-get install openjdk-8-jdk # 安装jdk
cd /opt
tar -xvf apache-jmeter-5.6.2.tgz # 假设已经下载了对应版本到该目录
vim /etc/profile # 将jmeter追加到系统环境变量export JMETER_HOME=/opt/apache-jmeter-5.6.2export PATH=$JMETER_HOME/bin:$PATH
source /etc/profile # 生效
- 检查java环境
- 检查jmeter环境
- 更改配置文件
-
master机
进入/opt/apache-jmeter-5.6.2/bin 目录,按以下配置修改jmeter.properties配置文件
注:remote_hosts 为执行机的ip及端口,多个执行机可通过英文逗号 “,” 进行拼接
server.rmi.ssl.disable=true(关闭SSL传输) -
slave机
进入/opt/apache-jmeter-5.6.2/bin 目录,修改jmeter.properties配置文件, 只需将server.rmi.ssl.disable=true即可
- 运行
- slave机
进入/opt/apache-jmeter-5.6.2/bin运行jmeter-server
- master机
jmeter -n -t ./sfs.jmx -l ./result.jtl -j ./result.log -r
注意事项
- 进行性能测试前,尽量对Jmeter进行减负,避免运行时间过长,导致Jmeter卡死:
(1)并发线程不要设置太高,建议单机300以下
(2)“察看结果树”勾选“仅日志错误”,尽可能减少jvm内存使用
(3)在压测时,要禁用诸如View Result Tree这类的监听器,这类监听器非常耗内存
(4)用jmeter测试时使用BeanShell脚本获取随机参数值,会导致请求时间过长,TPS过低。应改为使用csv读取参数值,记录的TPS会更加准确 - Master与各Slave使用的Java、jmeter版本保持一致;
- 若测试计划中引用了某插件,则Master与各Slave都要包含该插件
- 测试计划只需要放在Master上,执行时会自动分发到各Slave,不需要每台Slave复制一份