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环境下使用jmeter进行分布式测试的更多相关文章

  1. linux环境下使用jmeter进行压力测试

    linux环境下使用jmeter进行压力测试 linux环境下使用就meter进行压力测试: linux环境部署: 在Linux服务器先安装jdk: 2.以jdk-8u172-linux-x64.ta ...

  2. mosquitto在Linux环境下的部署/安装/使用/测试

    mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...

  3. Linux环境下安装Redis并完成测试(已验证)

    准备工作: 本人测试环境:Win7 xshell远程登录Linux Linux: ubuntu 软件包:redis-3..2.6.tar.gz (Linux下redis安装包) =========== ...

  4. linux环境下安装jmeter,启动执行脚本

    1.下载安装jmeter安装包 下载链接: https://pan.baidu.com/s/1KPhwNDsmTIAy41fEopHQEw 提取码: spwd 2.上传linux平台,解压jmeter ...

  5. 【Jmeter自学】Linux环境下Jmeter运行

    ==================================================================================================== ...

  6. linux环境下jmeter安装和运行

    linux环境部署: 在Linux服务器先安装jdk:2.以jdk-8u172-linux-x64.tar.gz为例:下载地址:http://www.oracle.com/technetwork/ja ...

  7. LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)

    安装采用YUM一键安装: 1.环境Centos 6.6 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve ...

  8. linux环境下测试环境搭建

    一.linux环境下测试环境搭建过程简述: 1.前端后台代码未分离情况下: 主要步骤为:安装jdk,安装mysql,安装tomcat,将项目代码部署到tomcat/webapps/下. 2.前端后台代 ...

  9. 在linux环境下安装redis并且搭建自己的redis集群

    此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 ...

随机推荐

  1. kubernets之从应用访问pod元数据以及其他资源

    一  downwardAPI的应用 1.1  前面我们介绍了如何通过configmap以及secret将配置传入到pod的容器中,但是传递的这些都是预先能够安排和只晓得,对于那些只有当pod创建起来之 ...

  2. buuctf—web—Easy Calc

    启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery,     ("# ...

  3. js reduce数组转对象

    借鉴:https://juejin.im/post/5cfcaa7ae51d45109b01b161#comment这位大佬的处理方法很妙,但是我一眼看过去没有明白,细细琢磨了下,终于明白了 1 co ...

  4. 5V 升压 8.4V,5V 转 8.4V 做两节锂电池充电芯片

    5V 升压 8.4V SOT23-6 封装的六脚升压 IC PW5300 是一颗 DC-DC 异步整流升压转换器芯片,输入电压范围 2.6V-5.5V.最高输出 电压 12V, PW5300 是一种电 ...

  5. Gradle使用及配置

    构建工具:Gradle(6.8) 下载地址:https://gradle.org/releases/ 下载最新版的二进制文件即可,下载"gradle-6.8.1-bin.zip文件,下载后完 ...

  6. SEO大杀器rendertron安装

    前段时间做SEO的优化,使用的是GoogleChrome/rendertron,发现这个安装部署的时候还是会有一些要注意的地方,做个记录 为什么要使用rendertron 目前很多网站都是使用 vue ...

  7. nodejs的调试debug

    目录 简介 开启nodejs的调试 调试的安全性 使用WebStorm进行nodejs调试 使用Chrome devTools进行调试 使用node-inspect来进行调试 其他的debug客户端 ...

  8. Spring Data JPA基本增删改查和JPQL查询(含完整代码和视频连接)

    问题:SpringDataJPA怎么使用? 一.考察目标 主要考核SpringDataJPA的用法 二.题目分析 spring data jpa 的使用步骤(下面有具体实现细节) 1.创建maven工 ...

  9. Golang 单元测试:有哪些误区和实践?

    https://mp.weixin.qq.com/s/k8WNWpCIVl4xTmP3TQ_gxQ

  10. MySQL 压测

    https://mp.weixin.qq.com/s/vKJZp5cGUetHokGh2EZUXg mysqlslap --iterations=100 --create-schema='test' ...