jmeter分布式环境搭建部署

  • jmeter分布式环境搭建
    • Jmeter运行方式:GUI和非GUI
    • GUI、非GUI遇到的问题
    • 如何解决?
    • Jmeter分布式部署流程
    • Jmeter非GUI运行时动态参数设置相关的参数化
    • Jmeter参数说明
    • Jmeter测试报告及详解
    • 测试报告图表信息详解

jmeter分布式环境搭建

在性能测试过程中经常会用到分布式环境压测,以下是分布式环境搭建的方法和介绍。

Jmeter运行方式:GUI和非GUI

GUI:在Windows系统上运行,图形化界面,方便查看测试结果,但是消耗压力机资源较高,容易卡死,有并发限制。
非GUI:通过命令行运行,无图形化界面,不方便查看测试结果,但是消耗压力机资源较低,可以支持较大并发。

GUI、非GUI遇到的问题

Jmeter是基于java程序运行的,在windows上使用Jmeter进行性能测试时,非常耗费客户机的CPU和内存,如果并发数稍微大一点(比如100、1000…并发),单台电脑的配置经常无法支持,很容易卡死,即使不卡死也会使电脑运行很慢,导致我们没办法进行其它操作。
通过cmd命令行,或者是在Linux上使用Jmeter进行性能测试时,能够大大缩减所需要的系统资源;但是需要将Jmeter脚本上传到Linux上使用命令行方式运行,如果脚本经常改动就要频繁上传;测试完成后要把结果数据下载到本地GUI环境中查看,当结果文件较大时,下载要花费大量时间,总是有很多不方便。

如何解决?

Jmeter的分布式控制,说的通俗一点,就是指远程启动功能,具体原理如下图: (来自官网)


1、客户端机器(window系统或者Linux服务器)作为一个控制器Master,控制多台slave机器的操作。
说明:调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater,mater不参与测试只负责发送指令。
2、Master和slave机器上最好装有相同版本的jdk和Jmeter,并配置好环境变量,安装和配置方法跟windows环境类似。
3、Master通过GUI界面或者非GUI模式启动slave机器,将Jmeter压测脚本发送给每台启动的slave,slave获得脚本后开始执行。slave本地不需预先存储脚本,但是需要有脚本中的依赖文件(如csv文件等)。
4、各台slave执行完成后,将结果传回给Master,Master收集后整合显示出来。

Jmeter分布式部署流程

1、下载Jmeter文件
Linux安装Jmeter,官网下载最新的二进制安装.tgz格式的包
2、上传文件,解压
SSH连接远程Linux服务器,上传文件后,解压,tar命令解压 tar -zxvf apache-Jmeter-5.3.tgz
3、设置环境变量
添加环境变量,修改系统变量:vi ~/.bash_profile,

export JMETER_HOME= /home/jmeter/apache-jmeter-5.4.1
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJmeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH

 source ~/.bash_profile,让变量生效
 设置完成后,执行Jmeter -v,如下图,安装完成

4、配置Jmeter相关文件(需要修改Master和slave机的配置)

A、Master控制机修改(以Windows为例)
Jmeter.properties修改
1、 查看Linux执行机的ip地址,然后设置remote_hosts=执行机1:端口号,执行机2:端口号
2、修改server_port=1099 执行启动远程连接的端口号 ,remote_hosts配置成一致的端口号
3、server.rmi.ssl.disable=false 改为 server.rmi.ssl.disable=true
4、server.rmi.localport=4000 执行机Jmeter_server启动显示的端口启动的端口号
5、查找到mode=Standard 项,将其前边的注释去掉(解决Jmeter进行分布式测试,远程机器来运行脚本,在察看结果树中的响应数据项为空白)
Jmeter-server.sh修改
RMI_HOST_DEF=-Djava.rmi.server.hostname=127.0.0.1 地址改成本机的ip地址,执行和控制机都需要改
Jmeter.bat
新增set rmi_host=-Djava.rmi.server.hostname=本机ip
修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%
B、slave机配置修改(以Linux为例)
Jmeter.properties修改
1、修改server_port=1099 表示控制机要远程连接通信的端口号,即Master配置文件Jmeter.properties的remote_hosts配置的端口号
2、server.rmi.localport=4000 执行机Jmeter_server启动显示的端口启动的端口号
3、server.rmi.ssl.disable=false 改为 server.rmi.ssl.disable=true
Jmeter-server.sh修改
RMI_HOST_DEF=-Djava.rmi.server.hostname=127.0.0.1 地址改成本机的ip地址,执行和控制机都需要改。

备注:
如果Linux服务器自身性能优越,可以单台Linux部署多个Jmeter进行测试,具体操作如下:
1、 复制Jmeter安装包,
2、 修改Jmeter.properties文件的端口号 server_port=1099和server.rmi.localport=4000,更改为未被占用的端口号
3、 然后修改Jmeter-server文件的启动端口号,1039即自己指定的端口号,和Jmeter.properties的server_port一致。

RMI_HOST_DEF=-Djava.rmi.server.hostname=127.0.0.1
${DIRNAME}/Jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1039} -s -j Jmeter-server.log "$@" &      (1039为自己指定的端口号)

4、完成后./Jmeter-server 启动服务
5、操作Master发起指令,进行测试
6、测试完成后,Master收集测试数据,并生成测试报告

如需脚本配置的方式可参考如下:

Jmeter.properties修改
1、查看Linux执行机的ip地址,然后设置remote_hosts= 1控制机:端口号, 2执行机:端口号(Master和slave机都这么修改)
2、修改server_port=1099 执行启动远程连接的端口号 ,remote_hosts配置成一致的端口号
3、server.rmi.ssl.disable=false 改为 server.rmi.ssl.disable=true

Jmeterserver.sh 脚本配置
1、 新建一个Jmeterserver.sh 文件,放在脚本执行的上级路径或jmeter安装路径
2、 脚本配置参数如下:

#!/bin/sh
APP_HOME=/home/tools/apache-jmeter-5.2.1/bin   #jmeter安装路径 (保证控制机和执行机的安装路径一致)
JAR_FILE=$APP_HOME/jmeter-server #访问的是jmeter bin目录下的jmeter-server
AGS_PAR=-Djava.rmi.server.hostname=127.0.0.1 #本机ip地址
APP_NAME=jmeter-server #访问的是新建文件中的jmeter-server服务地址
LOG_PATH=/home/tools/logs/jmeterserver.log #执行jmeter-server生的log文件
pid=0
start(){checkpidif [ ! -n "$pid" ]; thennohup sh $JAR_FILE $AGS_PAR > /home/tools/logs/jmeterserver.log 2>&1 &   #替换成LOG_PATH,生成log的文件路径echo "---------------------------------"echo "启动完成,按CTRL+C退出日志界面即可>>>>>"echo "---------------------------------"sleep 2stail -f $LOG_PATHelseecho "$APP_NAME is runing PID: $pid" fi
}status(){checkpidif [ ! -n "$pid" ]; thenecho "$APP_NAME not runing"elseecho "$APP_NAME runing PID: $pid"fi
}checkpid(){pid=`ps -ef |grep $APP_NAME |grep -v grep |awk '{print $2}'`
}stop(){checkpidif [ ! -n "$pid" ]; thenecho "$APP_NAME not runing"elseecho "$APP_NAME stop..."kill -9 $pidfi
}restart(){stop sleep 1sstart
}case $1 in  start) start;;  stop)  stop;; restart)  restart;;  status)  status;;   *)  echo "require start|stop|restart|status"  ;;
esac

脚本的执行命令为:sh /目录/jmeterserver.sh restart

PS:在测试过程如中断压测执行脚本,下次压测前需要重启服务(执行jmeterserver.sh),否则会出现脚本执行报错,报错异常如下:
Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
Failed to configure 127.0.0.1:1099

The following remote engines have not started:[127.0.0.1:1099, 127.0.0.2:1099]
(出现报错也可以手动在bin目录下执行jmeter-server.sh &)

其他说明
  1、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
  2、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。

Jmeter非GUI运行时动态参数设置相关的参数化

Jmeter的测试计划在运行Sampler之前会先加载运行属(Jmeter.properties,system.properties等)文件,而且Jmeter还提供了方法可以动态修改属性,在命令行中使用【-J】 来指定Jmeter Properties,脚本里面使用__P() 函数(工具-函数助手对话框中查找)来获取命令中指定的属性值。

配置说明:
1、并发数设置为KaTeX parse error: Expected group after '_' at position 2: {_̲_P(threads,1)},…{__P(cycles,1)},其中后面的1是默认值,作用是执行一次来调试脚本,这是__P函数的功能(虽然我一直都是用GUI模式来调试脚本的)
2、执行时长设置为${__P(duration,60)},默认1分钟(60s),如果同时设置了循环次数和执行时长,那么满足其中一个条件脚本就会停止。 执行次数=-1时即表示Forever
如下图:

Jmeter参数说明

Jmeter测试报告及详解

1、生成HTML测试报告的两种方式
A、利用已有的.jtl文件生成测试报告,
进入jmeter的bin目录下,输入如下命令:
jmeter -g test.jtl -o /path

PS:如果是在Windows环境命令行运行,必须指定生成的HTML文件存放文件夹,否则会报错;如果是linux环境,如指定路径下不存在该文件夹,会生成对应的文件夹存放报告文件!
B、无.jtl文件生成测试报告
如果还未生成.jtl文件,则可以通过如下命令,一次性完成测试执行和生成HTML可视化报告的操作,进入jmeter的bin目录下,输入如下命令:

jmeter -n -t test.jmx -l test.jtl -e -o /path
-n:以非GUI形式运行Jmeter
-t:source.jmx 脚本路径
-l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在
-e:在脚本运行结束后生成html报告
-o:用于存放html报告的目录

本地Windows环境执行截图如下:

执行完毕后,用浏览器打开生成的文件目录下的index文件,效果展示如下:

测试报告图表信息详解

测试报告分为两部分,Dashboard和Charts,下面分开解析。
1、Dashboard(概览仪表盘)
 Test and Report informations

 APDEX (应用性能指标)

 Requests Summary

2、Charts(详细信息图表)
PS:由于详细信息图表有点多,这里我挑几个性能测试过程中比较关键的图表解析!
Over Time
 Response Times Over Time(脚本运行期间的响应时间变化趋势图)
说明:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围。

 Response Time Percentiles Over Time (successful responses)
说明:脚本运行期间成功的请求响应时间百分比分布图,可以理解为聚合报告里面不同%的数据,图形化展示的结果。

 Bytes Throughput Over Time(脚本运行期间的吞吐量变化趋势图)
说明:在容量规划、可用性测试和大文件上传下载场景中,吞吐量是很重要的一个监控和分析指标。

 Latencies Over Time(脚本运行期间的响应延时变化趋势图)
说明:在高并发场景或者强业务强数据一致性场景,延时是个很严重的影响因素。

Throughput
 Transactions Per Second(每秒事务数)
说明:每秒事务数,即TPS,是性能测试中很重要的一个指标,它是用来衡量系统处理能力的一个重要指标。

Response Times
 Response Time Percentiles(响应时间百分比分布曲线图)
说明:即响应时间在某个范围内的请求在所有请求数中所占的比率,相比于平均响应时间,这个值更适合用来衡量系统的稳定性。

 Time Vs Threads(平均响应时间和线程数的对应变化曲线)
说明:可以通过这个对应的变化曲线来作为确定性能拐点的一个参考值。

jmeter分布式环境搭建相关推荐

  1. 2021年大数据环境搭建(二):分布式环境搭建

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 分布式环境搭建 集群规 ...

  2. Hadoop入门基础教程 Hadoop之完全分布式环境搭建

    上一篇我们完成了Hadoop伪分布式环境的搭建,伪分布式模式也叫单节点集群模式, NameNode.SecondaryNameNode.DataNode.JobTracker.TaskTracker所 ...

  3. Hadoop单机和伪分布式环境搭建

    hadoop环境搭建 1.三个环境        单机.伪分布式.分布式 2.三个分支       apache版本(Apache基金会)       cdh版本(cloudera公司)       ...

  4. Zookeeper分布式环境搭建

    Zookeeper分布式环境搭建 一.分布式安装部署 1.前置条件 2.集群规划 3.解压安装 4.配置zoo.cfg文件 5.集群操作 二.配置参数解读 1.tickTime 2.initLimit ...

  5. ZooKeeper之分布式环境搭建

    第1关:仲裁模式与伪分布式环境搭建 本关任务:了解ZooKeeper的仲裁模式,掌握伪分布式安装. vi /opt/zookeeper-3.4.12/conf/zoo.cfg 增加以下内容并保存:se ...

  6. Hadoop2.2.0伪分布式环境搭建(附:64位下编译Hadoop-2.2.0过程)

    Hadoop2.2.0伪分布式环境搭建: 写在前面:Hadoop2.2.0默认是支持32位的OS,如果想要在64位OS下运行的话,可以通过在64位OS下面编译Hadoop2.2.0来实现,编译的操作步 ...

  7. 最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程(二)

    继续上次的教程,这次安装hbase与hive.之前有同学反应百度网盘中没有hbase安装包,这次补上了,在上篇博客的网盘链接中已经有了,最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程 ...

  8. 1 Hadoop 3.2.4分布式环境搭建

    1 Hadoop 3.2.4分布式环境搭建 1 系统配置 3台centOS虚拟机 # 配置hosts解析 vim /etc/hosts192.168.88.129 hadoop1 192.168.88 ...

  9. HDFS伪分布式环境搭建-很不错

    HDFS伪分布式环境搭建 原创 ZeroOne01 2018-03-24 19:51:20 评论(0) 655人阅读 HDFS概述及设计目标 什么是HDFS: 是Hadoop实现的一个分布式文件系统( ...

最新文章

  1. 挨踢人生路--记我的10年18家工作经历 - 后记
  2. vue vuex vue-router后台项目——权限路由(超详细简单版)
  3. Sublime Text 2 中怎样查找scope的名称
  4. [转]用DateTime.ToString(string format)输出不同格式
  5. 数学建模:马王堆一号入墓年代的测定问题
  6. 阻塞队列之七:DelayQueue延时队列
  7. JavaScript实现职责链模式
  8. sql用户名数据迁移到mysql_如何将SQL Server数据迁移到MySQL
  9. The Normal Distributions Transform: A New Approach to Laser Scan Matching
  10. tar压缩及解压命令
  11. 转:div中内容上下居中小结
  12. 引入静态资源出现net:ERR_ABORTED
  13. 人民币对澳元汇率的大数据分析与预测
  14. 精益软件研发的秘密 IT大咖说 - 大咖干货,不再错过
  15. vue 跳转路由后返回上一页还是当前页面,但是路由地址有改变(已解决)
  16. 除法器的实现(恢复余数、不恢复余数、级数展开、Newton-Raphson)
  17. java开发平台有哪些_java都有哪些开发平台
  18. 记录下我磕磕碰碰的三个月找工作经历,offer拿到手软
  19. 北航计算机组成期末试题,北航-计算机组成题目汇总.pdf
  20. g++编译命令使用以及参数详解

热门文章

  1. php人力资源,HRM SAAS v2.5.7 – PHP人力资源管理系统SaaS平台版+免费分享
  2. 调整计算机启动顺序,电脑双系统如何修改第一启动项???
  3. Python源代码保密、加密、混淆
  4. 2023年千月影视双端app和乐彩V8双端影视源码强制全屏播放用tinyPlayer原生播放器模块
  5. 游戏开发,策划文档入门指南
  6. GraalVM 安装及运行Python
  7. Android8.0以上系统ROOT时,Magisk框架替代SpuerSU
  8. 网易云api访问登录后仍返回{msg: ‘需要登录‘, code: 301}
  9. 2、igraph的简单实战
  10. OrCAD导入元件原理图符号流程