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. java锁的对象引用

    当访问共享的可变数据时,通常需要同步.一种避免使用同步的方式就是不共享数据. 如果数据仅在单线程内访问,就不需要同步,这种技术称为"线程封闭",它是实现线程安全性最简单方式之一. ...

  2. 深入理解Redis之简单动态字符串

    目录 SDS SDS与C字符串的区别 SDS获取字符串长度复杂度为O(1),C字符串为O(N) SDS杜绝了缓存区溢出 减少修改字符串时带来的内存重分配次数 二进制安全 Redis没有直接使用C语言传 ...

  3. ASP.NET Core错误处理中间件[3]: 异常处理器

    DeveloperExceptionPageMiddleware中间件错误页面可以呈现抛出的异常和当前请求上下文的详细信息,以辅助开发人员更好地进行纠错诊断工作.ExceptionHandlerMid ...

  4. 图像分割论文 | DRN膨胀残差网络 | CVPR2017

    文章转自:同作者个人微信公众号[机器学习炼丹术].欢迎交流沟通,共同进步,作者微信:cyx645016617 论文名称:'Dilated Residual Networks' 论文链接:https:/ ...

  5. [Usaco2008 Feb]Line连线游戏

    题目描述 Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i个点 的横.纵 ...

  6. django 组件 自定义过滤器 自定义标签 静态文件配置

    组件 将一些功能标签写在一个html文件里,这个文件作为一个组件,如果那个文件需要就直接拿过来使用即可: 这是title.html文件,写了一个导航栏,作为一个公用的组件 <div style= ...

  7. SQL Server和Oracle数据类型对应关系

    在工作中,有时会遇到跨库传输数据的情况,其中 SQL Server 和 Oracle 之间的数据传输是比较常见的情况. 因为 SQL Server 和 Oracle 的数据类型有些差异,这就要求我们在 ...

  8. windows激活密钥

    密钥来源,微软官方 KMS 客户端安装密钥 | Microsoft Docs Windows Server 2008 R2 操作系统版本 KMS 客户端安装程序密钥 Windows Server 20 ...

  9. GIS基本概念,空间分析

    GIS基本概念,空间分析 一.GIS基本概念 1.1 要素模型(Feature) 1.2 矢量数据 1.3 空间分析 1.3.1 空间查询和空间量算 1.3.2 缓冲区分析 1.3.3 叠加分析 1. ...

  10. 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。

    package com.minxinloan.utils; import java.math.BigDecimal; public class Arith { // 源文件Arith.java: /* ...