JMeter分布式压测实战图解(5.1版本)

使用JMeter实现分布式压测,linux和windows中使用方法解析。
313阅读 · 2019-12-14 15:19发布

准备环境

执行环境

  • Linux:CentOS 7
  • Windows:Win10
  • JDK:1.8.0u151
  • JMeter:5.1.1

配置环境(配置使用如下ip,截图非该ip)

  • 控制机1:widows 192.168.0.1
  • 控制机2:linux 192.168.0.2
  • 负载机1:linux 192.168.0.3
  • 负载机2:linux 192.168.0.4

实操步骤

  1. 下载Jmeter
    https://archive.apache.org/dist/jmeter/binaries/
    
  2. 官方jmeter分布式压测文档
    http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
    
  3. 检查控制机和负载机的JDK和Jmeter版本是否一致。
    可以直接设置系统的环境变量使用相同JDK,也可以单独指定jmeter使用某个版本的JDK。若需要指定jmeter使用某个特定版本jdk,进入jmeter目录的bin目录下,编辑jmeter.bat或jmeter或jmeter.sh,添加如下内容:
    JAVA_HOME=D:\jdk1.8\JDK8_64
    
  4. 检查防火墙是否关闭,或者开放指定端口。
    CentOS 7版本的防火墙使用firewall,可以用如下命令查询防火墙状态
    firewall-cmd --status  //查看防火墙开启状态
    firewall-cmd --list-port  //查看开放端口
    
  5. 检查场景是否有参数化文件,需要拷贝到每台负载机中,路径一致。
  6. 配置证书。
    JMeter4.0开始,RMI的默认传输机制将使用ssl。需要秘钥和证书才能使用。
    如果需要使用SSL,在负载机和控制的jmeter.properties文件都必须配置“server.rmi.ssl.disable=false”。若值为true,则无需配置下面内容。
    进入控制机Jmeter安装目录的bin目录下。
     执行create-rmi-keystore。
     遇到提示一直回车,yes/no的地方填写yes。
     运行结束后,会在当前目录自动生成rmi_keystore.jks文件
     把rmi_keystore.jks文件复制到每台负载机的jmeter/bin目录下。
    
  7. 配置接口测试脚本
    1. 通过图形界面的jmeter配置场景。
    2. 导出jmx脚本,复制到控制机的自定义目录下。
  8. 配置负载机
    1. 修改jmeter/bin目录下的jmeter.properties文件。
    2. 添加内容“server_port=2099”和“server.rmi.localport=2099”,保存退出。
    3. 修改jmeter/bin目录下的jmeter-server文件。
    4. 倒数第二行添加内容“RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.0.3”,指定自己的ip,如果不添加该行,在执行该文件时需要手动携带。
    5. 执行./jmeter-server
    6. 在控制机telnet负载机的2099端口,如果能够连接则表示通信正常。(命令行没有提示无法连接既连接成功)
      telnet 192.168.0.3 2099
      
  9. 配置控制机

    1. 编辑jmeter/jmeter.properties
     2. 修改内容remote_hosts=192.168.0.3:2099,192.168.0.4,保存(若0.4没配置则无需添加)
     3. 上一步骤内容表示指定负载机的ip地址和端口。
     4. 准备开始执行压测。
     5. (linux控制机)启动bin/jmeter -n -t jmx/test.jmx -l report/report.jtl -r进行并发测试
     6. (windows控制机)点击Run->Remote Start指定某台负载机执行,或者ALL全部执行
    
    -n,使用命令行模式运行
     -t,指定使用哪个脚本
     -r,表示指定远程负载机执行发送请求
     -R,指定使用哪些Slave节点
     -l,指定压测记录保存位置
    

其他配置

查看命令行模式的实时结果

(linux为控制机时可以配置)

  1. 修改控制机的jmeter.properties文件
  2. 修改为如下内容
    summariser.name=summary  //名称
     summariser.interval=3  //统计频率,单位为秒
     summariser.log=true  //是否在控制台显示
    
  3. 重新运行jmeter后,可以查看到实时结果

全linux执行

有些场景不需要用到windows的jmeter控制机,如果使用linux生成的jtl文件,想在windows中的jmeter查看请求详情,需要在linux系统JMeter/bin目录下user.properties文件追加如下内容(追加后重新运行脚本即可):

  • 注意,性能测试时如果开以下配置会增加报告大小
    jmeter.save.saveservice.output_format=xml
      jmeter.save.saveservice.response_data=true
      jmeter.save.saveservice.samplerData=true
      jmeter.save.saveservice.requestHeaders=true
      jmeter.save.saveservice.url=true
      jmeter.save.saveservice.responseHeaders=true
      jmeter.save.saveservice.encoding=true
    

在被测服务器上查看并发数量

通过netstat -ano命令,查看负载机和被测机器的TCP连接信息,来判断有多少并发请求。可以通过以下命令查看:

netstat -ano|grep -E "192.168.0.3|192.168.0.4"|wc -l

可以把命令写入shell脚本,循环查询连接数。

测试结果查看

在脚本执行完后,可以通过两种方式分析结果

  • 通过jtl文件,在图形化界面的jmeter中加载jtl文件,查看最终结果。
  • 在命令行窗口,观察最后一行数据,统计得出的结果。

测试结果分析

比较简单的分析方法是查看“Summany Report”,Throughput表示吞吐量,等同于TPS。Average表示平均请求响应时间。Error%表示错误百分比。通过发送不同的请求数量,观察上面三种数据的结果,可以得出对应被测试接口的处理能力,计算出瓶颈在哪。

参考资料

《jmeter5.1分布式压测》https://mp.weixin.qq.com/s/lIS_YvQcVLxLiXru8A8cwQ参考资料