最近在做一些业务上云的项目,其中远程Rpc调用方式我们选择了Dubbo,为便于收集压测信息,我们选择了使用Jmeter来做压测工具,本文就来简单介绍如何使用Jmeter压测Dubbo服务接口,以及需要注意的事情。
在 https://jmeter.apache.org/download_jmeter.cgi 下载二进制包
下载后解压缩后,目录如下:
进入解压目录的bin目录,然后mac下执行 sh jmeter.sh ,如下图:
然后就会弹出界面:
<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>
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----");
}
}
首先我们需要把ConsumerHelloService类所在的应用打包为一个jar包,然后把打包好的jar放入到jmeter目录的apache-jmeter/lib/ext:
然后需要把打成的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结构如下:
其中lib中会包含所有依赖的jar.
按照上面讲解的执行sh jmeter.sh启动 界面
然后添加线程组
然后可以设置压测线程个数等属性
然后添加Java请求配置组件
然后在类名称这下拉框中就会存在dubbo插件类,
然后线程组设置线程个数,并保存:
到这里说明Jmeter已经找到了我们的dubbo扩展插件,下面我们添加一些监视器以便监控结果
这里你可以选择你需要的监控页面
最后单击绿色三角 开始压测:
注意:dubbo服务提供方线程池默认是200个线程,如果你压测时候设置线程个数超过200,则会抛出下面异常:
这时候你需要修改服务提供方的线程池中线程个数,具体是调用ProtocolConfig类的setThreads方法来设置,或者如果是xml方式,使用下面方式设置:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。