• linux环境下使用jmeter进行分布式测试


    1、前言

    熟练使用jmeter进行性能测试的工程师都知道,jmeter的客户端性能是有点差的。这会导致一个问题,其客户端的性能损耗会干扰到性能测试的结果,而且当线程数/并发大到一定程度时,客户端性能会急速下降,导致整个性能测试过程不可控。

    比如说我自己这台啵罗啵罗的工作电脑,启动500线程,基本就卡死了。

    因此在进行大压力性能测试时,通常的解决方案是使用分布式无界面测试的办法,将一台客户机的压力分布到数台执行机上,避免jmeter客户端的性能损耗。

    下面就来详细阐述一下完成分布式压测的过程。

    2、环境准备

    • 物理准备

      两台linux centos7服务器

    • jdk安装

      网上有大量的linux安装jdk攻略,此处不再赘述。

      CentOS下个人推荐使用yum安装的方式,方便快捷,而且省去环境配置的痛苦。

      yum search jdk

    列出jdk可选安装包如下图所示:

     然后选择合适的包安装:

      yum -Y install java-1.8.0-openjdk.x86_64

    当然要使用yum命令,可能需要配置YUM源等等,这里就真的不再赘述了。

    • jmeter安装

      这里推荐直接直接将你本地的jmeter客户端打包上传至linux服务器。因为我们编写jmeter测试计划还会在本地进行(因为图形界面比较方便操作),所以更推荐使用跟你本地一样的客户端,以免遇到版本不同所带来的不可预见的一些问题。

      将本地jmeter客户端打成zip文件,上传到服务器目录,如/opt/jmeter(上传路径自由选择)。使用unzip命令进行解压,以我自己用的jmeter客户端为例:

      unzip apache-jmeter-5.0.zip

      当然,请注意unzip命令并非CENTOS默认自带的,也可能需要通过rpm或者yum先安装。

      然后赋予解压后的文件夹完全权限:

      chmod 777 -R apache-jmeter-5.0

    然后使用如下命令配置jmeter环境变量:

      export JMETER_HOME=/opt/jmeter/apache-jmeter-5.0
      export PATH=$JMETER_HOME/bin:$PATH
      export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH

    并且:

      source /etc/profile

    使得配置生效。

    这里直接修改/etc/profile文件,将环境变量配置写入到文件最后也是可以的。

    配置好了以后,敲入:

      jmeter -v

    看到如下信息代表安装配置成功:

    3、分布式配置

    在至少两台linux服务器上安装好jmeter之后,下一步开始进行分布式的配置,其原理大抵如下图所示:

    简而言之,我们将在执行机上启动jmeter-server的这样的一个小型服务,然后使用调度机通过ssl协议访问这一服务并向他发出执行指令和收集结果。

    • 配置执行机

    在执行机上编辑jmeter安装目录下的/bin/jmeter.properties配置文件,将:server.rmi.ssl.disable值改为true,代表允许ssl连接。

      # Set this if you don't want to use SSL for RMI
      server.rmi.ssl.disable=true

    为避免jmeter-server的端口随机分配,继续修改如下两个值:

      # the following property before starting the server:
      server.rmi.localport=4000
    
      # RMI port to be used by the server (must start rmiregistry with same port)
      server_port=1099

    分别将这两个端口值改为你所想使用的端口号。

    配置完毕后,用如下命令启动jmeter server:

      jmeter-server -Djava.rmi.server.hostname=172.16.10.76

    TIPS:如果想使用无日志模式,可以改写成如下形式:

      nohup ./jmeter-server -Djava.rmi.server.hostname=172.16.100.76 >>1.txt &

    在每一台执行机上完成如上配置并启动。

    • 配置宿主机

    同样编辑jmeter安装目录下的/bin/jmeter.properties配置文件,修改如下值,即指定执行机的地址与端口,如有多个以“,”隔开:

      # Remote Hosts - comma delimited
      remote_hosts=127.0.0.1:1099,172.16.100.76:1099
      #remote_hosts=localhost:1099,localhost:2010
    • 执行脚本

    在控制机上运行如下命令:

    jmeter -n -t test.jmx -R 172.16.100.76,172.16.100.77 -l testReport.jtl 

    或者(因为已在宿主机上配置了默认使用的执行机信息)

    jmeter -n -t test.jmx -r -l testReport.jtl

    其中参数的含义为:

      • n:非gui运行
      • t:指定测试脚本 
      • R:指定多少个 agent 启动并参与测试
      • r: 代表全部 agent 启动并参与测试
      • l:生成测试结果文件

    启动后看到开始如下滚屏则表示测试已经运行成功:

    • 查看日志

      在分布式执行过程中,主要的日志可以查看:

      • 执行机上的jmeter-server.log:记录执行过程中的详细信息,与单机执行时的jmeter.log等效
      • 执行机的服务日志可以通过nohup命令将其写入外部文件,以便查看
      • 测试执行的结果报告可以通过输入到jtl文件进行记录

      




    尊重原创,欢迎转载,请注明出处!


  • 相关阅读:
    面向过程
    生成器
    迭代器
    装饰器
    函数及嵌套
    字符编码与文件操作
    linux_ssh
    LNMP
    BZOJ 3238: [Ahoi2013]差异
    BZOJ 3998: [TJOI2015]弦论
  • 原文地址:https://www.cnblogs.com/dayu2019/p/14379039.html
Copyright © 2020-2023  润新知