压测工具JMeter使用指南

压测工具JMeter使用指南目录 GUI 模式压测基本使用断言自定义变量批量导入测试数据压测数据库 CLI 模式压测压测流程分析压测结果分布式压测 nbsp 前端的静态资源一般都放在 cdn 上 速度快 无需压测 压测一般是指后端接口的压测 一般只压测请求频率高的接口 压测请求频率低的接口没有意义 jmeter 是一个开源免费 功能强大的压测工具 纯 java 编写 支持不同的请求协议 http https 支持分布式压测 nbsp GUI 模式压测基本使用 win 下载 zip linux 下载 tgz 里面的文件都是一样的 只是压缩格式不同

 

通过压测可以定位系统的性能瓶颈,以便针对性地进行优化。

压测结果一般关注

  • qps:query per second,每秒处理的读请求数量
  • tps:transaction per second,每秒处理的写请求数量
  • 请求处理耗时:95线、99线,95%、99%的请求落在什么区间范围,剩下的极少数请求可能是受到网络环境等极端情况影响。
     

jmeter是一个开源免费、功能强大的压测工具,纯java编写,支持不同的请求协议(http、https),支持分布式压测。

 

GUI模式压测

基本使用

win下载zip,linux下载tgz,里面的文件都是一样的,只是压缩格式不同。

解压,主要使用bin目录下的文件,win执行 jmeter.bat 启动,linux执行 jmeter.sh 启动。

 

修改GUI语言

  • 可在 jmeter.properties 中修改GUI语言,language=zh_CN,默认en
  • 也可启动后在菜单栏的 options -> choose language 中修改,但这种只是临时修改,重启失效。

 

创建压测任务

1、对测试计划单击右键,添加线程组

2、对线程组单击右键,分别添加

  • 取样器(sampler)的http请求。可在Parameters中添加请求参数。
  • 监听器(listener)的查看结果树、聚合报告。

一个http请求对应一个接口,一个线程组可添加多个请求,这些请求通过名称进行区分。

点击工具栏的运行是压测所有线程组,可以对某个线程组右键运行,只压测该线程组。如果不想压测某些线程组或某些请求,可以右键禁用。

可以把压测任务保存为.jmx文件,传给其他人使用,在jmeter中打开.jmx文件即可。

 

聚合报告的指标

  • label:http请求名称
  • samples:总的请求个数
  • average:请求处理时间的平均数
  • median:请求处理时间的中位数
  • 9x%line:9x%的请求都在该时间内处理完成
  • min:请求处理的最小时间,0表示处理时间极短
  • max:请求处理的最大时间
  • error%:错误率
  • throughtput:相当于qps

压测到throughtput上升缓慢,这时服务器cpu的使用率也差不多100%了,就行了。

 

断言

  • 可以对线程组右键添加断言,这种断言会应用于此线程组的所有http请求
  • 也可以对某个http请求右键添加断言,这种断言只应用于这个http请求

断言一般使用响应断言即可。

 

自定义变量

使用步骤

  • 对线程组单击右键,添加配置元件(config element)的用户定义变量,设置自定义的变量
  • 在http请求中通过${xxx}引用对应的变量

 

批量导入测试数据

对线程组单击右键,添加配置元件(config element)的csv数据集配置

  • 选择csv文件,也可以是txt之类的文本文件,不要标题,一行对应一个实参表
  • 设置变量名,有多个变量名时英文逗号分隔
  • 填写分隔符,如果是csv文件,不用填分隔符
  • 默认读取到最后一行后会从头循环读取,可以将recycle on eof设置为false、stop thread on eof设置为true,这样读取到最后一行后会自动终止测试。

 

压测数据库

1、点击测试计划,在最底部点击浏览,添加对应的数据库驱动的jar包。

2、新建线程组,分别添加

  • 取样器(sampler)的jdbc请求
  • 配置元件的jdbc连接配置。这个也可以添加到jdbc请求中,只应用于该jdbc请求。
  • 监听器的查看结果树、聚合报告。查看结果树中的返回响应,有利于定位错误原因。
    在这里插入图片描述
    在这里插入图片描述
    根据压测结果调整jdbc连接配置、数据库本身配置,反复压测,以优化数据库。






 

CLI模式压测

jmeter需要使用大量的线程模拟用户请求,很吃性能。GUI模式是在带图形界面的操作系统上,使用jmeter的GUI界面进行压测,不管是操作系统的GUI,还是jmeter本身的GUI,都占了机器不少性能,况且我们自己的开发机也运行着很多程序,jmeter不能完全发挥测试性能,压测结果有误差。

一般是把jmeter部署在单独的服务器上,在命令行进行压测,不使用监听器等耗性能的设置,以便发挥jmeter的测试性能;需要先设置好应用的堆内存 -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m,jmeter的堆内存可以在bin/jmeter中设置,不过jmeter的堆内存一般不用手动设置。

 

压测流程

2、在jmeter的GUI上创建好测试任务,没问题后,将要使用的线程组另存为.jmx脚本,传到linux上。

  • 不要使用需要GUI界面支持的功能,比如监听器的查看结果树、聚合报告;尽量不使用有额外性能损耗的功能,比如断言、监听器。
  • 如果要测带宽影响,使用服务器的公网ip进行测试;一般使用服务器的内网ip进行测试,以排除带宽影响。
     

3、在linux上jmeter的bin目录下执行

jmeter -n -t /test/user_api.jmx -l /result/user_api.jtl -e -o /result/user_api 
  • -n 非GUI模式
  • -t 要使用的.jmx测试脚本
  • -l 指定结果文件。这个文件会包含每个请求的结果。这个文件要是空的,如果不是空的,先手动删除此文件。
  • -e 生成html报告
  • -o 指定html报告的存放目录,此目录要是空的,如果不是空的,先手动删除此目录。

说明

  • 这个命令可以在win命令行运行
  • 如果提示.jmx文件没有对应权限,可以chmod赋权

 

分析压测结果

 

分布式压测

分布式压测:使用多个jmeter节点同时进行压测,测试结果更加准确。

1、准备工作

  • 在各个jmeter节点上安装jdk、jmeter,版本保持一致
  • 各个jmeter节点要在同一局域网内
  • 各个jmeter节点之间通过RMI协议进行通信,RMI默认使用1099端口,所以各个jmeter节点都需要开放1099端口,或者关闭防火墙
     

2、修改master的配置文件 jmeter.properties

#slave节点的ip,写内网ip。如果master也要压测应用,可以把master的ip写上。 remote_hosts=192.168.1.3,192.168.1.14 #如果RMI不使用ssl,可以改为true 禁用ssl server.rmi.ssl.disable=true 

 

3、分别启动slave

#执行bin目录下的jmeter-server ./jmeter-server 

 

4、master启动压测

  • GUI方式:双击jmeter.bat启动,创建压测任务,点击菜单栏的 运行 -> 远程启动所有,所有的slave都会压测线程组中指定的接口。可以只选择某个slave进行启动。
  • CLI方式:在GUI中创建压测任务,不要使用需要GUI支持、有额外性能开销的功能,保存为.jmx脚本,上传到master节点,cd到bin目录执行
#-r表示使用分布式压测 jmeter -n -t /test/user_api.jmx -r -l /result/user_api.jtl -e -o /result/user_api 

 

参考官方文档

  • https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
  • https://jmeter.apache.org/usermanual/remote-test.html


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215049.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:48
下一篇 2026年3月18日 下午2:49


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号