精华内容
下载资源
问答
  • JMeter 分布式压测
    2022-02-17 15:09:17

    一. 背景

    在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持
    4000并发),单台压测机的配置(CPU和内存)可能无法支持,这时可以使用
    Jmeter提供的分布式测试的功能

    二. 原理

    1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。

    2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。

    3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

    三. Windows操作

    1. 执行机(slave)配置:

    1、 slave机上需要安装JMeter并添加环境变量,参照《JMeter下载与安装文档》

    2、 修改slave机Jmeter的bin目录下jmeter.properties文件,修改如下两个配置项,比如我这里修改为1099:

       server_port=1099
    
       server.rmi.localport=1099
    

    3、 启动bin目录下的:jmeter-server.bat
    4、多台slave时,重复1~2步骤即可

    2. 调度机(master)配置

    1、在master机器上找到Jmeter的bin目录下jmeter.properties文件,修改如下配置,IP和Port是slave机的IP以及端口(端口可自定义),多台slave之间用","隔开,我这配置了2台:

        remote_hosts= 10.203.130.36:1099, 192.168.110.119:1099
    

    2、打开Jmeter,选好脚本及设置运行场景,选择远程全部启动(也可选择远程启动某一台slave)

    四. Linux操作

    1、 Linux系统中安装JMeter,并配置好JMeter环境变量(参考《JMeter下载和安装》文档)
    2、 在slave机上修改jmeter.properties中的端口,参考Windows下修改方法:

    [root@gd-largetest-stress-102-23 songy]# cd jmeter3.2/bin/
    [root@gd-largetest-stress-102-23 bin]# vi jmeter.properties
    

    比如我修改为1099:

        server_port=1099
    
     server.rmi.localport=1099
    

    3、 开启执行脚本机器上的server服务,bin/jmeter-server

    [root@gd-largetest-stress-102-15 bin]# ./jmeter-server 
    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
    Using local port: 1099
    Created remote object: UnicastServerRef [liveRef: [endpoint:[10.98.102.15:1099](local),objID:[-43550fae:15e7a5a6422:-7fff, -7419700032143407872]]]
    

    4、 在master上修改bin/jmeter.properties,添加从机的IP及端口(使用-r启动所有从机)1099是默认的rmi通信端口

    remote_hosts=192.168.5.95:1099,10.98.102.15:1099
    

    5、 在控制机执行分布式命令

    [root@gd-xwtest-yc-102-19 bin]# jmeter -n -t ../linux.jmx -R 10.98.102.15:1099 -l ../result.jtl//指定从机IP
    
    [root@gd-xwtest-yc-102-19 bin]# ./jmeter -n -t ../linux.jmx -r -l ../linux.jtl//启动所有从机执行脚本
    

    五. 其它说明:

    1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。

    2、参数文件:如果使用csv等进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

    3、如果在linux下用命令执行分布式测试时要传线程数、执行时间或循环次数等参数时,需使用-G参数,而不是-J,这个是踩坑过来的经验,执行命令如下

    ./jmeter -n -t ../linux.jmx -r -l ../linux.jtl -Gusers=100 -Gtimes
    更多相关内容
  • 目录 一、使用缘由 二、配置流程 1.下载jmeter安装包 2.配置调度机 3.配置执行机 4. 调度测试 ... 配置Jmeter分布式压测(多台机器同时发起请求) Jmeter开启压测。 之后,集成jenkins+grafana+prome
  • 第9章 高级篇之多节点JMeter分布式压测实战 共十章 这是第9章
  • Jmeter分布式压测

    千次阅读 2022-03-27 12:58:02
    同时单机压测存在压测宿主机CPU和内存配置有限制,随着模拟用户线程数增加会让压测机存在很大性能瓶颈,所以需要通过jmeter分布式压测特性进行应用,支撑模拟更多用户进行压测 分布式压测配置前提 分布式压测...

    分布式压测背景

    压测不同请求量级的服务,需要模拟的用户并发请求数量也会差异很多。同时单机压测存在压测宿主机CPU和内存配置有限制,随着模拟用户线程数增加会让压测机存在很大性能瓶颈,所以需要通过jmeter分布式压测特性进行应用,支撑模拟更多用户进行压测

    分布式压测配置

    Controller机器配置

    • 找到%JMETER_HOME%/bin/jmeter.properties文件修改如下配置:
    remote_hosts=192.168.100.36
    
    server.rmi.ssl.disable=true
    
    # To change the default port (1099) used to access the server:
    #server.rmi.port=1234  如果server启动端口修改,则需要修改默认的端口
    • jmeter5.0以上版本需要生成证书(待完善 --前期报错未记录)

    Agent机器配置

    • 找到%JMETER_HOME%/bin/jmeter.properties文件修改如下配置:
    # RMI port to be used by the server (must start rmiregistry with same port)
    server_port=1099  #代表启动jmeter-server默认监听口
    
    server.rmi.ssl.disable=true

    若修改为端口10000启动服务后可以通过查看,对应服务监听了10000端口

     

    分布式压测配置常见问题

    1、jmeter远程启动提示“no such object in table”

    解决方法:remote_hosts=192.168.100.36:1099 去掉配置host的端口

    目前在默认在%JMETER_HOME%/bin/jmeter.properties指定了端口

    # To change the default port (1099) used to access the server:
    #server.rmi.port=1234  如果需要修改默认的端口则需要修改

    2、远程启动服务时提示“java.net.ConnectException: Connection refused: connect”

    可能原因:1、Slave未启动服务

    2、启动服务但是同样报错,网络不同,检查agent和controller启动监听网口IP是否在同一网段

    而我遇到的情况是,agent和controller存在多个网卡多个IP时,各自启动服务时监听网卡IP不在同一网段

    服务端(Slave)配置:

    方法一:
    jmeter-server -Djava.rmi.server.hostname=192.168.100.xxx
    
    方法二:
    jmeter-server文件中添加
    RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.x.x (和控制端可以通信的IP)
    
    但具体使用哪种方法,有什么区别?

    很多没有说明清楚jmeter在什么环境使用如上配置,接下来分别查看安装bin目录下jmeter-server.sh和jmeter-server.bat文件内容如下:

    • jmeter-server.sh分析
    1. 发现文件中包含RMI_HOST_DEF变量,且启动命令中使用了RMI_HOST_DEF变量,可以初步判断当时在linux上启动jmeter server时可以通过这种方式指定启动的IP
    ${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"

    #!/bin/sh

    删除掉部分内容

    ##   To change the RMI/Server port:
    ##
    ##   SERVER_PORT=1234 jmeter-server
    ##

    DIRNAME=`dirname $0`

    # If the client fails with:
    # ERROR - jmeter.engine.ClientJMeterEngine: java.rmi.ConnectException: Connection refused to host: 127.0.0.1
    # then it may be due to the server host returning 127.0.0.1 as its address

    # One way to fix this is to define RMI_HOST_DEF below
    #RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx

    ${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"

    • jmeter-server.bat(部分实际运行内容)分析

    1、(文件内容向下滚动)发现最后实际运行通过调用call jmeter -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%或者call jmeter -Dserver_port=%SERVER_PORT% -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%启动服务;

    2、JMETER_CMD_LINE_ARGS通过脚本可以看出用于接受执行脚本文件时,cmd控制台传入的参数,例如jmeter-server -Djava.rmi.server.hostname=192.168.100.xxx命令中对应-Djava.rmi.server.hostname部分

    3、是否可以通过如下方式设置达到目的,但最终发现始终失败,只有通过jmeter-server -Djava.rmi.server.hostname=192.168.xx.xxx能实现。按道理来将应该有其他解决方式,要不然每次加参数比较麻烦,待继续实践哈,给自己留点问题(2022.2.25)

     

    setlocal
    
    if exist jmeter-server.bat goto winNT1
    echo Changing to JMeter home directory
    cd /D %~dp0
    :winNT1
    
    if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
    echo Could not find ApacheJmeter_core.jar ...
    REM Try to work out JMETER_HOME
    echo ... Trying JMETER_HOME=..
    set JMETER_HOME=..
    if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
    echo ... trying JMETER_HOME=.
    set JMETER_HOME=.
    if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
    echo Cannot determine JMETER_HOME !
    goto exit
    
    :setCP
    echo Found ApacheJMeter_core.jar
    
    REM No longer need to create the rmiregistry as it is done by the server
    REM set CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar
    
    REM START rmiregistry %SERVER_PORT%
    REM
    
    rem On NT/2K grab all arguments at once
    set JMETER_CMD_LINE_ARGS=%*
    
    if not "%SERVER_PORT%" == "" goto port
    
    call jmeter -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%
    goto end
    
    
    :port
    call jmeter -Dserver_port=%SERVER_PORT% -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%
    
    :end
    
    rem No longer needed, as server is started in-process
    rem taskkill /F /IM rmiregistry.exe
    
    :exit

    控制端(Controller)配置

    修改jmeter.bat文件

    增加配置项:set rmi_host=-Djava.rmi.server.hostname=1.X.X.X(和server可正常通信的IP)
    修改配置项:set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %CLASS_UNLOAD% %DDRAW% %rmi_host%

    3.当jmeter脚本中需要依赖csv等数据文件时,该文件需上传至服务器,并需要设置正确的路径

    展开全文
  • JMeter分布式压测

    千次阅读 2022-04-22 16:43:13
    为什么要做分布式压测: 因为jmeter本身存在局限性,一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU等)是有限的。由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要...

    文章部分参考了网络上的内容,作者介意可以联系删除哦~
    为什么要做分布式压测:
    因为jmeter本身存在局限性,一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU等)。由于 Jmeter 是 Java 应用,对 CPU 和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现 JAVA 内存溢出的错误,导致测试脚本本身就有瓶颈。
    目的:
    确保压力机不会出现性能瓶颈,在后面进行性能分析时,不需要考虑压力机是否是导致性能瓶颈的主要原因之一。

    1.执行分布式压测的前提条件:

    • 运行相同版本的JMeter
    • 使用相同的java版本
    • 有基于SSL的RMI的有效密钥库,或者禁用SSL。(本文举例中是采用的禁用SSL)
    • 都在一个网络
    • 关闭防火墙

    一、介绍

    1. 分布式压测,首先我们需要确定一台调度机(Master),其他的机器作为执行机(slave)。
    2. 执行时,master会把脚本发送到每台slave上,这表示只有master上会有.jmx脚本。其他的slave上无需在下载该脚本。但是在主master跑脚本时,slave需要双击打开jmeter-server.bat。
    3. 执行完成后,slave会把结果传给master。

    二、执行机(salve)

    1. 首选打开 -->jmeter.properties文件,编辑以下内容:
      在这里插入图片描述
      在这里插入图片描述
    2. 配置完成后,双击打开jmeter-server.bat,测试过程中保持打开状态。
      在这里插入图片描述
      在这里插入图片描述

    三、调度机(master)

    1. 在调度机执行脚本之前,我们同样需要先设置 jmeter.properties 文件,需要设置远程控制的IP和端口。在第一步设置salve的时候我们选择的端口是1099,slave的ip可以在salve的cmd输入命令— ipconfig 进行查看。
      在这里插入图片描述

    2. 打开JMeter,第一步:选择需要远程启动的slave(执行机)
      在这里插入图片描述

    3. 第二步:运行本地的脚本。通过聚合报告可以看到请求了10次,线程数设置的是5。所以远程的slave机上成功运行了。
      在这里插入图片描述
      在这里插入图片描述

    4. slave上看到的结果:
      在这里插入图片描述

    四、连接多个调度机(salve)

    1. 打开master(执行机)的 jmeter.properties 配置文件,将需要连接的IP进行配置。
      在这里插入图片描述

    2. 打开JMeter,选择需要远程启动的IP,也可以远程启动所有:我这里是选择启动所有的。所有可以看到聚合报告中的请求数是15。因为线程数是5 我请求了三次,5*3=15。
      在这里插入图片描述

    展开全文
  • jmeter分布式压测

    2021-06-16 20:22:31
    jmeter进行压测时,在大并发几千上万的情况下,一个机器的资源(硬件资源cpu内存,网络资源带宽等)往往是不够用的,因此就需要分布式压测技术 分布式压测顾名思义就是用d

    用jmeter进行压测时,在大并发几千上万的情况下,一个机器的资源(硬件资源cpu内存,网络资源带宽等)往往是不够用的,因此就需要分布式压测技术

    分布式压测顾名思义就是用多个机器协同一起施压,由一个master机器作为发起机器,多个slave机器作为施压机器,salve和master的jmeter版本最好保持一致,jmeter不分系统拷过去就是了

    1,linux配置jmeter

    vi /etc/profile

    在最后一行添加

    export JMETER_HOME=/root/apache-jmeter-5.2.1
    export PATH=${JMETER_HOME}/bin:$PATH

    然后source /etc/profile

    执行jmeter -v,如下表示成功

    2,配置slave机器

    进入bin目录

    vi jmeter.properties

    server_port=1234(自定义端口号,避免被占用)

                    -server.rmi.localport=1234(跟上面设置的端口号一致)

                    -server.rmi.ssl.disable=true

         修改jmeter-server:

                    -RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.0.106(绑定本机ip)

            启动slave机上jmeter bin目录下的jmeter-server(jmeter-server.bat for windows),记录ip和port

    修改master配置并远程启动slave

             修改jmeter.properties:

                    -server.rmi.ssl.disable=true

                    -remote_hosts=192.168.0.106:1234(与slave上配置的ip、port对应)

                    备注:若有多个slave,使用逗号分隔多个ip、port,如remote_hosts=ip1:port1,ip2:port2        

             在master机上,打开测试脚本,启动-->远程启动slave机,可以启动单个slave或全部启动

                              image.png

             可在master上使用聚合报告、查看结果树等监听器实时查看slave机的执行情况

            此种方法往往只适合并发不大的情况,如果并发百万级别,就需要开发自己的性能测试系统,可以批量部署slave加压机,并自动配置,在系统同上执行加压参数配置,并可执行脚本,该系统可以用jmeter的核心引擎做二次开发

    展开全文
  • 八、JMeter分布式压测

    2021-12-24 16:22:24
    多节点分布式压测1. 准备工作(1) 注意事项(2) 专业名词(3) 远程拷贝(内网地址)(3) 启动 1. 准备工作 (1) 注意事项 官网给出了一些注意事项: 系统上的防火墙被关闭或正确的端口被打开。 the firewalls on the ...
  • jmeter 分布式压测

    千次阅读 2020-04-14 11:45:45
    JMeter是当前Web性能测试中应用最为广泛的工具,简洁强大的界面,开源免费的授权,以及广泛的插件扩展,使得JMeter能满足几乎所有Web场景的性能测试。然而,单机性能的限制,是JMeter一直以来最大的诟病。由于采用...
  • jmeter分布式压测笔记

    2022-03-20 15:58:25
    jmeter分布式压测 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3fwDt6Wk-1647763131363)(E:\Project\LouisPython3Study\docs\jmeter\01-jmeter笔记.assets\image-20220313214423332.png...
  • jmeter分布式压测怎么做

    千次阅读 2022-03-14 10:25:45
    由于大量压测需求,在一台测试机器并不能满足我的需求,于是我查询了如何使用jmeter免费开源软件进行分布式压测我先在网上查到了这篇文章, 分布式压测怎么做 - 简书 (jianshu.com)...
  • 2.Jmeter分布式压测介绍 在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载...
  • Jmeter分布式压测Linux配置及运行教程

    千次阅读 2021-11-14 11:04:51
    此时性能的瓶颈在于压力机,而不是系统应用服务器,就需要使用Jmeter分布式压测技术,以达到执行大量线程并发施压的目的。 如何判断瓶颈是否出现在压力机身上呢: 当单台压力机线程数增加,比如从300线程增加到...
  • 1、Jmeter分布式压测介绍 在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载...
  • jmeter分布式压测要点

    2021-07-27 10:00:05
    系统HOSTS文件中进行类似 本机IP 主机名的配置,如10.0.0.23 zhoucentos,否则启动jmeter server会报错! 1,在每台机器上都部署 jmeter 2,如果是java脚本,将java脚本和相关lib包都放在jmeter目录lib/ext下 3,...
  • 2.Jmeter分布式压测介绍 在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载...
  • 一、分布式压测原理 执行过程: 1.启动后,调度机将jmx脚本复制分发给各个执行机; 2.执行机收到脚本后,启动命令执行 3.每台执行机收到的脚本都是一样的,所以最终样本量=线程数 x循环次数 x执行机总数 注意: 如果...
  • Jmeter分布式压测方案

    2021-12-15 17:54:26
    本地电脑通过Jmeter图形化界面(GUI方式)控制本机及其他远程机器,以它们为压力机,对被测的服务器进行压力测试,并将压测的结果同步到Jmeter图形化界面中,进行分析。 准备: 1、作为压力机的本地电脑和远程机器...
  • 1)Master(调度机)和Slave(压测机)分别上传jmeter工具,上传成功后jmeter目录下执行chmod +x ./* (对所有文件进行赋权,是指可以在linux下运行) 2)Master(调度机)和Slave(压测机)分别进入jmeter中bin目录...
  • vi /bin/jmeter.properties remote_hosts=10.10.80.202,10.10.80.186,10.10.80.19 server_port=1099 默认就是1099,不要该端口的话就不需要修改 server.rmi.ssl.disable=true jmeterengine.nongui.port=0 agent: vi ...
  • 为什么要做分布式? 之前我们讲过如何在Linux环境下,用单机进行压测,但是实际工作中,有时候我们需要用多台机器进行压测。那么什么情况下我们需要用多台机器进行压测呢?当我们一台机器不够的情况下,就需要用多台...
  • 在项目中我们经常会有压测的需求,而小巧轻便且免费的JMeter也顺势成为了我们的主流压测工具。 JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做得比较成熟,...
  • 为什么进行jmeter分布式压测? 一、干货解释原因: **原因一:**一台压力机的 Jmeter 默认最大支持 1000 左右的并发用户数(线程数),再大的话,容易造成卡顿、无响应等情况,这是受限于 Jmeter 其本身的机制和硬件...
  • 基于linux系统的jmeter分布式压测部署。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,404
精华内容 1,761
关键字:

jmeter分布式压测