实战Jmeter压测Dubbo服务接口

简介:

一、前言

最近在做一些业务上云的项目,其中远程Rpc调用方式我们选择了Dubbo,为便于收集压测信息,我们选择了使用Jmeter来做压测工具,本文就来简单介绍如何使用Jmeter压测Dubbo服务接口,以及需要注意的事情。

二、Jmeter使用

2.1 下载Jmeter

https://jmeter.apache.org/download_jmeter.cgi 下载二进制包
image.png
下载后解压缩后,目录如下:
image.png

2.2 界面模式启动

进入解压目录的bin目录,然后mac下执行 sh jmeter.sh ,如下图:
image.png

然后就会弹出界面:
image.png

2.3 项目中引入Jmeter依赖

    <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>3.0</version>
        </dependency>

三、编写Jmeter需要的Dubbo扩展插件

public class ConsumerHelloService extends AbstractJavaSamplerClient {

    private Hello hello = null;

    @Override
    public SampleResult runTest(JavaSamplerContext context) {

        System.out.println("---begin run----");

        SampleResult sr = new SampleResult();

        try {
            sr.sampleStart();

            String result = hello.sayHello(UUID.randomUUID().toString());
            
            sr.setResponseData("from provider:" + result, null);
            sr.setDataType(SampleResult.TEXT);
            sr.setSuccessful(true);
            sr.sampleEnd();
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("---end run----");

        return sr;
    }

    @Override
    public void setupTest(JavaSamplerContext context) {
        System.out.println("---begin setup----");
        try {
            DubboFactory dubboFactory = new DubboFactory();
            dubboFactory.setRegistry("127.0.0.1:2181");
            dubboFactory.setGroup("dubbo");
            dubboFactory.init();
            
            hello = dubboFactory.getReference(Hello.class, "dubbo", null, true, null,
                    null);
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
            throw e;
        }
        System.out.println("---end setup----");
    }
}
  • 如上代码,插件类需要继承AbstractJavaSamplerClient类,并且重写runTest和setupTest这两个方法。
  • setupTest方法会在ConsumerHelloService类实例化后调用一次,用来执行一些初始化操作,这里我们用来完成对服务接口Hello的消费,也就是链接服务提供方,并返回一个Hello的代理类。
  • runTest方法则用来具体调用Hello接口的方法,我们压测也就是频繁的调用runTest来测试hello的sayHello方法。

四、dubbo插件打包与压测

4.1 dubbo插件的安装

首先我们需要把ConsumerHelloService类所在的应用打包为一个jar包,然后把打包好的jar放入到jmeter目录的apache-jmeter/lib/ext:
image.png
然后需要把打成的jar包里面所依赖的包放入到apache-jmeter/lib。
那么如何找jar包依赖的jar那,一个简单的方法是把项目添加springboot的maven插件:

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.0.2.RELEASE</version>
                <configuration>
                    <executable>false</executable>
                    <excludeDevtools>true</excludeDevtools>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

springboot插件的机制打成的jar结构如下:
image.png
其中lib中会包含所有依赖的jar.

4.2 测试

按照上面讲解的执行sh jmeter.sh启动 界面

然后添加线程组
image.png
然后可以设置压测线程个数等属性
image.png

然后添加Java请求配置组件
image.png
然后在类名称这下拉框中就会存在dubbo插件类,
image.png

然后线程组设置线程个数,并保存:
image.png

到这里说明Jmeter已经找到了我们的dubbo扩展插件,下面我们添加一些监视器以便监控结果
image.png
这里你可以选择你需要的监控页面

最后单击绿色三角 开始压测:
image.png

注意:dubbo服务提供方线程池默认是200个线程,如果你压测时候设置线程个数超过200,则会抛出下面异常:
image.png
这时候你需要修改服务提供方的线程池中线程个数,具体是调用ProtocolConfig类的setThreads方法来设置,或者如果是xml方式,使用下面方式设置:
image.png

最后、Java并发编程之美已经出版

京东链接: https://item.jd.com/12450812.html
天猫链接:https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.61.59a73c85cVE3Sk&id=579705310959&user_id=1932014659&cat_id=2&is_b=1&rn=8030c6abc3a06ef8b8e63bc1badcbbb2

目录
相关文章
|
10月前
|
Rust Java 测试技术
还在用 Jmeter 做压测?试试 oha 吧!你会毫不犹豫的爱上它!
在 Web 服务与 API 性能测试中,选择合适的工具至关重要。本文介绍基于 Rust 的高效性能测试工具 **OHA**,并与经典工具 **JMeter** 对比。OHA 以其高性能、低资源占用和简洁易用的特点脱颖而出,适合高并发场景下的快速测试。而 JMeter 功能丰富、支持多协议,适合复杂测试需求。两者各有优势,选择需根据具体场景决定。OHA 安装简单,命令行操作便捷,是性能测试的新利器。
524 0
还在用 Jmeter 做压测?试试 oha 吧!你会毫不犹豫的爱上它!
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
1256 17
微服务框架Dubbo环境部署实战
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
884 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
1261 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
529 6
|
JSON Dubbo Java
【Dubbo协议指南】揭秘高性能服务通信,选择最佳协议的终极攻略!
【8月更文挑战第24天】在分布式服务架构中,Apache Dubbo作为一款高性能的Java RPC框架,支持多种通信协议,包括Dubbo协议、HTTP协议及Hessian协议等。Dubbo协议是默认选择,采用NIO异步通讯,适用于高要求的内部服务通信。HTTP协议通用性强,利于跨语言调用;Hessian协议则在数据传输效率上有优势。选择合适协议需综合考虑性能需求、序列化方式、网络环境及安全性等因素。通过合理配置,可实现服务性能最优化及系统可靠性提升。
505 3
|
C# 开发者 Windows
勇敢迈出第一步:手把手教你如何在WPF开源项目中贡献你的第一行代码,从选择项目到提交PR的全过程解析与实战技巧分享
【8月更文挑战第31天】本文指导您如何在Windows Presentation Foundation(WPF)相关的开源项目中贡献代码。无论您是初学者还是有经验的开发者,参与这类项目都能加深对WPF框架的理解并拓展职业履历。文章推荐了一些适合入门的项目如MvvmLight和MahApps.Metro,并详细介绍了从选择项目、设置开发环境到提交代码的全过程。通过具体示例,如添加按钮点击事件处理程序,帮助您迈出第一步。此外,还强调了提交Pull Request时保持专业沟通的重要性。参与开源不仅能提升技能,还能促进社区交流。
238 0
|
Dubbo Java Nacos
【实战攻略】破解Dubbo+Nacos+Spring Boot 3 Native打包后运行异常的终极秘籍——从零开始彻底攻克那些让你头疼不已的技术难题!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但使用Dubbo+Nacos+Spring Boot 3进行GraalVM native打包后常遇运行异常。本文剖析此问题及其解决策略:确认GraalVM版本兼容性;配置反射列表以支持必要类和方法;采用静态代理替代动态代理;检查并调整配置文件;禁用不支持的功能;利用日志和GraalVM诊断工具定位问题;根据诊断结果调整GraalVM配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
728 0
|
8月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
1767 10
|
10月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1435 23