dubbo图形化界面搭建_使用 JMeter 进行 Dubbo 性能测试
1 前言
说道性能测试工具,你会立刻联想到哪一个?ab(ApacheBench)、JMeter、LoadRunner、wrk…可以说市面上的压测工具实在是五花八门。那如果再问一句,对 Dubbo 进行性能压测,你会 pick 哪一个?可能大多数人就懵逼了。可以发现,大多数的压测工具对开放的协议支持地比较好,例如:HTTP 协议,但对于 Dubbo 框架的私有协议:dubbo,它们都显得力不从心了。
如果不从通用的压测工具上解决 Dubbo 的压测需求问题,可以自己写 Dubbo 客户端,自己统计汇总结果,但总归不够优雅,再加上很多开发同学没有丰富的测试经验,很容易出现一些偏差。说到底,还是压测工具靠谱,于是便引出了本文的主角 —— jmeter-plugins-for-apache-dubbo。这是一款由 Dubbo 社区 Commiter – 凝雨 同学开发的 JMeter 插件,可以非常轻松地对 Dubbo 实现性能测试。
2 JMeter 介绍
在开始压测 Dubbo 之前,先简单介绍一下这款开源的性能测试工具 —— JMeter。JMeter 是 Apache 组织基于 Java 开发的一款性能测试工具。它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域,并可以在 Windows、Mac、Linux 环境下安装使用。JMeter 还提供了图形界面,这使得编写测试用例变得非常简单,具有易学和易操作的特点。
JMeter 官网:http://jmeter.apache.org/download_jmeter.cgi
2.1 安装 JMeter
截止本文发布,官方的最新版本为:apache-jmeter-5.1.1.zip , 下载后直接解压即可。
jmeter目录
在 ${JMETER_HOME}/bin 下找到启动脚本,可以打开图形化界面
- Mac/Linux 用户可以直接使用 jmeter 可执行文件,或者 jmeter.sh 启动脚本
- Windows 用户可以使用 jmeter.bat 启动脚本
2.2 命令行提示信息
启动过程中会有一段命令行日志输出:
================================================================================Don't use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI): jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]& increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch fileCheck : https://jmeter.apache.org/usermanual/best-practices.html================================================================================
注意到第一行的提示,GUI 仅仅能够用于调试和创建测试计划,实际的性能测试需要使用命令行工具进行。
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
- 【jmx file】:使用 GUI 创建的测试计划文件,后缀名为 .jmx
- 【results file】:测试结果文本文件输出路径
- 【Path to web report folder】:测试报告输出路径,JMeter 的强大之处,可以生成图文并茂的测试报告
2.3 GUI 界面展示
上图所示为 JMeter 的主界面。官方提供了国际化支持,通过 【Options】->【Choose Language】可以将界面语言变更为简体中文。
3 JMeter 压测 HTTP
本节以 JMeter 压测 HTTP 为引子,介绍 JMeter 的使用方式,让没有使用过 JMeter 的读者对这款工具有一个较为直观的感受。
3.1 创建线程组
在“测试计划”上右键 【添加】–>【线程(用户)】–>【线程组】。
给线程组起一个名字,方便记忆。
- 线程数:决定了由多少线程并发压测
- Ramp-Up:代表了 JMeter 创建所有线程所需要的时间,如图所示则代表每 0.1s 创建一个线程
- 循环次数:在运行所设置的次数之后,压测将会终止。如果想要运行固定时长的压测,可以设置为:永远,并在下面的调度器中指定持续时间
3.2 增加 HTTP 取样器
在刚刚创建的线程组上右键 【添加】–>【取样器】–>【HTTP请求】。
为 HTTP 取样器配置上压测地址和必要的参数
3.3 添加察看结果树
在刚刚创建的线程组上右键 【添加】–>【监听器】–>【察看结果树】。
只有添加了【察看结果树】才能让我们看到 GUI 中测试的结果。
3.4 准备 HTTP Server
使用 SpringBoot 可以快速构建一个 RestController,其暴露了 localhost:8080/queryOrder/{orderNo} 做为压测入口
@RestControllerpublic class OrderRestController { @Autowired OrderService orderService; @RequestMapping("/queryOrder/{orderNo}") public OrderDTO queryOrder(@PathVariable("orderNo") long orderNo) { return orderService.queryOrder(orderNo); }}
被压测的服务 OrderService :
@Componentpublic class OrderService { public OrderDTO queryOrder(long orderNo) { OrderDTO orderDTO = new OrderDTO(); orderDTO.setOrderNo(orderNo); orderDTO.setTotalPrice(new BigDecimal(ThreadLocalRandom.current().nextDouble(100.0D))); orderDTO.setBody(new byte[1000]); return orderDTO; }}
3.5 验证结果
在刚刚创建的线程组上右键 【验证】,执行单次验证,可以用来测试与服务端的连通性。在【察看结果树】选项卡中可以看到【响应数据】已经正常返回了。
3.6 执行测试计划
还记得之前启动 GUI 时控制台曾经提示过我们,GUI 只负责创建测试计划并验证,不能用于执行实际的并发压测。在 GUI 中准备就绪之后,我们可以在【文件】->【保存测试计划为】中将测试计划另存为 rest-order-thread-group.jmx 测试文件,以便我们在命令行进行压测:
1jmeter -n -t ./rest-order-thread-group.jmx -l ./result.txt -e -o ./webreport
下图展示了最终生成的测试报告,主要汇总了执行次数、响应时间、吞吐量、网络传输速率。
在实际的测试报告中,还有更加详细的维度可以展示,上述只是展示了汇总信息。
4 JMeter 压测 Dubbo
JMeter 默认并不支持私有的 dubbo 协议,但其优秀的扩展机制使得只需要添加插件,就可以完成 Dubbo 压测,这一节也是本文重点介绍的部分。
4.1 安装 jmeter-plugins-for-apache-dubbo
插件地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo
目前该插件支持对最新版本的 Dubbo 进行压测,推荐的安装方式:
- 克隆项目:git clone https://github.com/thubbo/jmeter-plugins-for-apache-dubbo.git
- 打包项目,构建 JMeter 插件:mvn clean install ,得到:jmeter-plugins-dubbo-2.7.3-jar-with-dependencies.jar
- 将插件添加到 ${JMETER_HOME}libext
安装插件后的ext目录
4.2 增加 Dubbo 取样器
之前的小结已经介绍了如何添加线程组和 HTTP 取样器,现在想要对 Dubbo 应用进行性能测试,可以直接复用之前的线程组配置,在线程组上右键 【添加】–>【取样器】–>【Dubbo Sample】。
创建 Dubbo 取样器之后,可以对其进行配置
4.3 准备 Dubbo Provider
复用 HTTP 取样器时的 OrderService
@Servicepublic class OrderDubboProvider implements OrderApi { @Autowired OrderService orderService; @Override public OrderDTO queryOrder(long orderNo) { return orderService.queryOrder(orderNo); }}
配置 application.properties,注册服务到 Zookeeper 注册中心:
dubbo.scan.basePackages=com.alibaba.edas.benchmarkdubbo.application.name=dubbo-provider-demodubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.protocol.port=20880
4.4 验证结果
在 JMeter 中配置好 Dubbo 服务所连接的注册中心,接着通过 Get Provider List 可以获取到服务提供者列表,以供压测选择。在线程组上右键 【验证】,执行单次验证,可以用来测试与服务端的连通性。在【察看结果树】选项卡中可以看到【响应数据】可以正常执行 Dubbo 调用了。
4.5 执行测试计划
可以将 Dubbo 取样器和 HTTP 取样器包含在同一个测试计划中一起执行,同时进行了 Dubbo 接口与 Rest 接口的性能对比。在命令行进行压测:
1jmeter -n -t ./rest-order-thread-group.jmx -l ./result.txt -e -o ./webreport
下图展示了最终生成的测试报告:
Dubbo 接口与 Rest 接口所封装的业务接口均为 OrderService,所以压测上的差距直接体现出了 Dubbo 和 Rest 的差距。从报告对比上来看,Dubbo 接口的平均 RT 远低于 Rest 接口。
5 总结
本文从零到一介绍了使用 JMeter 压测 HTTP 的方法,让读者熟悉 JMeter 的使用方式,并着重介绍了使用 jmeter-plugins-for-apache-dubbo 插件压测 Dubbo 的方法。
由于 JMeter Plugin 的限制,目前 Dubbo 的压测请求是通过泛化调用进行发送的,会有一定程度的性能下降,所以在实际评估 Dubbo 接口性能时,接口实际性能会比压测结果更加乐观。
dubbo图形化界面搭建_使用 JMeter 进行 Dubbo 性能测试相关推荐
- 小白使用centos7图形化界面后搭建“巡风安全扫描系统”
因为本人使用centos图形化界面搭建"巡风安全扫描系统"出现了各种问题,故整理了一下详细. 申明:如果并非安装了(GUI莫斯)图形化的可以使用一条命令解决,建议参考以下链接:ht ...
- python制作图形化小游戏_创意编程|Python的GUI简易界面设计测测你的反应力
Python的GUI简易界面设计案例 测测你的反应力 作为初次接触代码编程的你,是不是觉得Python程序除了"码"就是"字"即使是有趣的程序除了烧烧 ...
- c++图形化界面_还能这样用?Linux下如何编译C程序?
Windows下常用IDE来编译,Linux下直接使用gcc来编译,编译过程是Linux嵌入式编程的基础,也是嵌入式高频基础面试问题. 一.命令行编译及各个细分编译过程 hello.c示例代码: #i ...
- python图形界面设计代码_(八)Python 图形化界面设计
3.1.文本输入和输出相关控件:文本的输入与输出控件通常包括:标签(Label).消息(Message).输入框(Entry).文本框(Text).他们除了前述共同属性外,都具有一些特征属性和功能. ...
- Cent os7 _ LINUX虚拟机安装_设置网络及图形化界面_安装教程
准备工具(可到官网去下载): 1.VMware Workstation 15.5.6 版本 链接:https://pan.baidu.com/s/1o9w1Em91dYms0zR0fF7u3A 提取码 ...
- 肝货,详解 tkinter 图形化界面制作流程!
作者 | 黄伟呢 来源 | 数据分析与统计学之美 本期案例是带着大家制作一个属于自己的GUI图形化界面->用于设计签名的哦(效果如下图),是不是感觉很好玩,是不是很想学习呢?限于篇幅,今天我们首 ...
- aria2下载工具命令行和图形化界面使用
如图是搭建好图形化界面下载软件的一个截图,可以看到界面很是熟悉的感觉. 下面就开始我们今天的教程吧. Question? 这是个啥东西? 命令行怎么用? 图形化怎么用? Answer: aria2就是 ...
- ubuntu 无法进入startx_Ubuntu无法进入图形化界面(报错/dev/sda1:clean的解决)
进入命令行模式,执行下面的命令: rm -rf /etc/X11/xorg.conf cp /etc/X11/xorg.conf.failsafe /etc/X11/xorg.conf 重启电脑. 上 ...
- MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
最新文章
- 6 Springboot 整合Redis
- 引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针
- Laravel 5.2问题-----postman进api的post请求,为什么出现Forbidden?
- php发送get、post请求获取内容的几种方法
- 【HihoCoder - 1851】D级上司 (树形图,dfs)
- python每隔几秒执行一次_Python设置程序等待时间
- Hibernate 可编程的配置方式
- c语言0x00如何不截断_数组越界及其避免方法,C语言数组越界详解
- 目前国内最热门的四款远程桌面控制软件
- 计算机科学与技术毕业论文题目【115个】
- base64编码规则
- Caused by: javax.security.auth.login.LoginException: unable to find LoginModule class: com.ibm.secur
- DTCloud编码规范
- 计算机硬盘的参数错误,电脑提示移动硬盘参数错误的解决方法
- Android APK瘦身之Android Studio Lint (代码审查)
- 网页知识入门-浏览器和网页生成
- 在 HTML 中使用 ARIA 的规则
- 大家来学VIM(一个历久弥新的编辑器)
- module xxx missing dependencies
- Android——m3u8视频文件下载