jmeter-分布式压测

jmeter为什么要做分布式压测

  • 一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU、IO等)是有限的
  • 由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现 JAVA 内存溢出的错误,导致测试脚本本身就有瓶颈

Jmeter 支持分布式压测

  • 将需要模拟的大量并发用户数分发到多台压力机,使 Jmeter 拥有更大的负载量,满足真实业务场景(高并发场景)
  • 确保压力机不会出现性能瓶颈
  • 在后面进行性能分析时,就不需要考虑压力机是否会导致性能瓶颈的主要原因之一

jmeter分布式原理

  • Cnotroller 是控制机,Slaves 是多个压力机
  • 分布式测试中,Cnotroller 通过命令行将测试脚本分发给所有 Slave
  • Slave 不需要启动 Jmeter GUI,通过 CLI 模式执行测试
  • Slave 执行完后,会把结果回传给 Master
  • Master 收集所有 Slave 的结果并汇总成一个结果集

Slave压力机配置

  1. jmeter目录下的bin目录中,打开jmeter.properties文件,修改server.rmi.ssl.disable=false,改为true,并去掉注释
  2. jmeter目录下的bin目录中,打开system.properties文件,最后一行添加java.rmi.server.hostname=本机ip

Controller控制机配置

  1. jmeter目录下的bin目录中,打开jmeter.properties文件,修改server.rmi.ssl.disable=false,改为true,并去掉注释
  2. 打开Contorller机下jmeter安装文件下的bin目录:jmeter.properties文件,搜索remote_hosts=127.0.0.1,将Slave机的IP写在后面,多个ip用逗号隔开

执行分布式

  1. 先执行slave机, ./jmeter-server或jmeter-server.bat
  2. Controller机,执行./jmeter.sh或jmeter.bat
  3. 也可以命令启动
    jmeter -n -t test.jmx -R 192.168.1.100,192.168.1.101 -l test.jtl
    jmeter命令行常用参数
    -n 命令行模式
    -t 指定jmx脚本地址(地址可以是相对路径,可以是绝对路径)
    -h 查看帮助
    -v 查看版本
    -p 指定读取jmeter属性文件,比如jmeter.properties文件中设置的
    -l 记录测试结果的文件,通常结果文件为jtl格式(文件可以是相对路径,可以是绝对路径)
    -s 以服务器方式运行(也是远程方式,启动Agent)
    -H 设置代理,一般填写代理IP
    -P 设置代理端口
    -u 代理账号
    -a 代理口令
    -J 定义jmeter属性,等同于在jmeter.properties中进行设置
    -G 定义jmeter全局属性,等同于在Global.properties中进行设置,线程间可以共享)
    -D 定义系统属性,等同于在system.properties中进行设置
    -S 加载系统属性文件,可以通过此参数指定加载一个系统属性文件,此文件可以用户自己定义
    -L 定义jmeter日志级别,如debug、info、error等
    -j 制定执行日志路径。(参数为日志路径,不存在不会自动创建,将日志输出到命行控制台)
    -r 开启远程负载机,远程机器列表在jmeter.properties中指定
    -R 开启远程负载机,可以指定负载机IP,会覆盖jmeter.properties中remote_hosts的设置
    -d 指定Jmeter Home目录
    -X 停止远程执行
    -g 指定测试结果文件路径,仅用于生成测试报表,参数是csv结果文件
    -e 设置测试完成后生成测试报表
    -o 指定测试报告生成文件夹(文件夹必须存在且为空文件夹)

常见错误

  1. 报错 permission denied

    解决办法:修改整个 jmeter 目录权限 Chmod -R 755 apache-jmete根目录
  2. connection refused

    解决办法:
    1.查看防火墙是否关闭
    注:centos7 上关闭防火墙:
    firewall-cmd --state //查看防火墙状态
    systemctl stop firewalld.service //关闭防火墙
    并重新启动 jmeter-server
posted @ 2022-08-18 19:07  小小滴人a  阅读(305)  评论(0编辑  收藏  举报