性能测试工具 jmeter 分布式压力测试实操

shan · 2018年03月02日 · 最后由 huangwang 回复于 2020年08月14日 · 2380 次阅读

本文在 Non-GUI Mode 下进行,准备好三台有 jdk 环境,linux 操作系统,同一局域网测试机器,运行两台 slave,一台 master 机器,进行分布式测试。

slave-1/slave-2/master 配置好 jmeter 环境(以下操作在 jdk 版本 1.8 环境下进行的)

1.下载 jmeter3.2

wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-3.2.tgz

2.解压

tar xvf apache-jmeter-3.2.tgz

3.添加环境变量

vim  /ect/profile

最后一行添加代码:

JMETER=/root/apache-jmeter-3.2
CLASSPATH=$CLASSPATH:$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar
PATH=$PATH:$JMETER/bin

运行以下命令修改立即生效:

source /etc/profile

查看版本是否配置成功:

jmeter -v 

4.准备好自己的测试脚本 jmx 文件放在目录/apache-jmeter-3.2/test 下

slave-1 / slave-2 启动 jmeter-server

5.运行 jmeter-server

进到目录/apache-jmeter-3.2/bin:

vim jmeter-server

添加以下代码:(**** 为每台 server 自己的 ip):

RMI_HOST_DEF=-Djava.rmi.server.hostname=****
  • 开启 jmeter-server:

    ./jmeter-server
    
  • 运行成功的话会在控制台显示:

    Created remote object: UnicastServerRef [liveRef: [endpoint:[***](local),objID:[***, ***]]]
    

master 机器运行测试脚本

6.修改配置文件 jmeter.properties

进入目录/apache-jmeter-3.2/bin:

vim jmeter.properties

大概 1038 行,添加以下代码:

jmeterengine.nongui.port=0

7.运行脚本,开始测试

测试脚本 test.jmx,在目录/apache-jmeter-3.2/test 下,新建文件夹 report,用来保存结果:

mkdir report

运行以下命令 (*** 为 slave 测试机器的 ip,以逗号,间隔):

jmeter -n -t ws_test.jmx -R  ***,*** -l test.jtl -e -o /apache-jmeter-3.2/test/report/
  • 提示以下消息则表示成功开始测试:

    Creating summariser <summary>
    Created the tree successfully using test.jmx
    Configuring remote engine: ***
    Configuring remote engine: ***
    Starting remote engines
    Starting the test @ Sun Mar 04 11:23:31 CST 2018 (1520133811112)
    Remote engines have been started
    
  • 此时 slave 机器控制台会提示:

    Starting the test on host *** @ Sun Mar 04 11:23:32 CST 2018 (1520133812700)
    
  • 测试脚本运行结束 master 控制台会显示结果:

  • slave 机器控制台会提示:

    Finished the test on host *** @ Sun Mar 04 11:25:53 CST 2018 (1520133953286)
    

    至此测试已经完成。

8.查看测试结果报告

master 机器上运行:

python -m SimpleHTTPServer 8000

报告查看网址(*** 为该机器 ip):http://***:8000/report/index.html

9.遇到的坑

  • 在 slave 开启 jmeter-server 时,直接运行./jmeter-server,会提示错误

    Server failed to start: java.rmi.RemoteException: Cannot start. ***  is a loopback address.
    An error occurred: Cannot start. *** is a loopback address.
    

    貌似是因为没有指定主机导致的,所以在 jmeter-server 中指定 RMI_HOST_DEF 写入 hostname 搞定了问题:

    vim jmeter-server
    

    添加以下代码:(*** 为每台 server 自己的 ip):

    RMI_HOST_DEF=-Djava.rmi.server.hostname=***
    
  • 在 master 跑测试脚本时,会一直提示如下信息,导致测试一直跑不起来:

    Waiting for possible shutdown message on port 4445 
    

    解决方法:
    进入目录/apache-jmeter-3.2/bin:

    vim jmeter.properties
    

    大概 1038 行,添加以下代码:

    jmeterengine.nongui.port=0
    

    这个是用于监听 shutdown message 的,如果不需要,可以直接设置为 0 即可。

  • 每台机器要在同一局域网下,最好操作系统保持一致(此次测试在 linux 下实现),不然运行 master 测试脚本有可能会提示拒绝连接的错误。

共收到 3 条回复 时间 点赞

jmeter 分布式,启动时间特别长,生成的文件.jtl 特别大,怎么破

  • 补充一下:是 1139 行

直接通过 master 向压力机请求?可以直接在 win 通过代理请求到压力机在传递给集群吧,感觉有图形界面会好管理一些;

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册