51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 710|回复: 0
打印 上一主题 下一主题

一文2000字从0到1手把手教你jmeter分布式压测

[复制链接]
  • TA的每日心情
    无聊
    2024-10-29 09:20
  • 签到天数: 76 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2023-11-28 10:19:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    一、jmeter为什么要做分布式压测jmeter本身的局限性
    • 一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU等)是有限的
    • 由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现 JAVA 内存溢出的错误,导致测试脚本本身就有瓶颈

    JVM 堆内存的局限性
    Java 应用的 jvm 堆内存 heap 受压力机硬件限制,虽然我们可以调整堆内存大小
    cmd 启用 Jmeter GUI 时,也会有提示
    1. <font size="3"><font size="3">increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file</font></font>
    复制代码
    翻译:增加 Java 堆内存来满足测试的要求
    但是单机无法支撑数以万计大并发,此时,需要多个压力机进行分布式压力测试,这样性能瓶颈就不会是我们的压力机了
    联想场景
    • 测试 1000 线程并发的场景,但单机只能支持 200 并发无法达到1000
    • 通过分布式(5 台机器起)可以模拟 1000 并发

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

    二、分布式原理
    把上面的动图完整看完,就懂了,原理如下:
    • Cnotroller 是控制机,Slaves 是多个压力机
    • 分布式测试中,Cnotroller 通过命令行将测试脚本分发给所有 Slave
    • Slave 不需要启动 Jmeter GUI,通过 CLI 模式执行测试
    • Slave 执行完后,会把结果回传给 Master
    • Master 收集所有 Slave 的结果并汇总成一个结果集

    注意
    • 压力机也可以叫:负载机、代理机、执行机、肉鸡....各种各样的名字,但他们都是 Slave
    • Master 也可以执行测试脚本,也可以不执行只负责管理

    三、分布式压测的前提条件已经配置
    1. <font size="3">注意事项

    2. 1、保持Contorller和Slave机器的JDK、jmeter以及插件等配置版本一致;
    3. 2、如果测试数据有用到CSV或者其他方式进行参数化,需要将data在每台Slave上复制一份,且读取路径必须保持一致;
    4. 3、确保Contorller和Salve机器在同一个子网里面;
    5. 4、检查防火墙是否被关闭,端口是否被占用(防火墙会影响脚本执行和测试结构收集,端口占用会导致Slave机报错);
    6. 5、分布式测试中,通过远程启动代理服务器,默认查看结果树中的响应数据为空,只有错误信息会被报回;
    7. 6、如果并发较高,建议将Contorller机设置为只启动测试脚本和收集汇总测试结果,在配置文件里去掉Contorller机的IP;
    8. </font>
    复制代码
    1、修改Contorller配置
    打开Contorller机下jmeter安装文件下的bin目录:jmeter.properties文件,搜索remote_hosts=127.0.0.1,将Slave机的IP和端口写在后面,比如:
    1. <font size="3">remote_hosts=127.0.0.1:1099,172.16.6.90:1099,172.16.6.91:1099</font>
    复制代码
    其中172.16.6.90和172.16.6.90为Slave机的IP,每个Agent机之间用英文半角逗号隔开,修改保存。注意默认端口都为1099
    切记不论从主机器都要修改:server.rmi.ssl.disable=true,并且去掉#,否则会报错误
    2、负载机
    • 首先安装好jdk和jmeter环境,具体见我的上一篇文章。然后打开配置文件 /bin/jmeter.properties 找到并取消这段配置的注释 server.rmi.ssl.disable=false ,false改成true。

    1. <font size="3"># Password of Trust store
    2. #server.rmi.ssl.truststore.password=changeit
    3. #
    4. # Set this if you don't want to use SSL for RMI
    5. server.rmi.ssl.disable=true      # 改成true</font>
    复制代码

    • 输入命令:jmeter-server -Djava.rmi.server.hostname=172.16.2.114 ,启动 anget 节点。jmeter-server 后面的参数指定 agent 的 IP
    3、启动jemter
    启动jmeter后,设置线程组、配置元件、取样器、监听器等原件,点击“运行-远程启动”:
    可以选择远程启动一个Slave机,或者选择远程全部启动,即可进行分布式测试了。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 08:07 , Processed in 0.063504 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表