(九)JMH的详细使用,以及压测dubbo

本文详细介绍了如何使用JMH工具对Dubbo服务进行性能压测,包括依赖引入、注解应用、运行配置及结果分析。通过实例展示了如何测量吞吐量、平均执行时间等指标,以及与JMeter、ab等工具的对比。

1、JMH简介

JMHJava Microbenchmark Harness,是Java用来做基准测试的一个工具,该工具由OpenJDK提供并维护,测试结果可信度高。

相对于 Jmeter、ab ,它通过编写代码的方式进行压测,在特定场景下会更能评估某项性能。

本次通过使用JMH来压测Dubbo的性能(官方也是使用JMH压测)

2、使用

只需要引用两个jar即可:

<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-core</artifactId>
    <version>1.29</version>
</dependency>
<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-generator-annprocess</artifactId>
    <version>1.29</version>
</dependency>

通过一系列的注解即可使用JMH。

@State

只能用在类上,有三个取值:

Scope.Thread:默认的State,每个测试线程分配一个实例;
Scope.Benchmark:所有测试线程共享一个实例,用于测试有状态实例在多线程共享下的性能;
Scope.Group:每个线程组共享一个实例;

@OutputTimeUnit

时间单位,如毫秒 TimeUnit.MILLISECONDS、秒 TimeUnit.SECONDS

@Benchmark

声明一个public方法为基准测试方法。该类下的所有被@Benchmark注解的方法都会执行。

相当于类的main方法

@BenchmarkMode

指定测试某个接口的指标,如吞吐量、平均执行时间,一般我都是选择 ALL

Mode有:

  • Throughput: 整体吞吐量,例如“1秒内可以执行多少次调用” (thrpt,参加第5点)

  • AverageTime: 调用的平均时间,例如“每次调用平均耗时xxx毫秒”。(avgt)

  • SampleTime: 随机取样,最后输出取样结果的分布,例如“99%的调用在xxx毫秒以内,99.99%的调用在xxx毫秒以内”(simple)

  • SingleShotTime: 以上模式都是默认一次 iteration 是 1s,唯有 SingleShotTime 是只运行一次。往往同时把 warmup 次数设为0,用于测试冷启动时的性能。(ss)

@BenchmarkMode({
   
   Mode.Throughput,Mode.All})
public class StressTestProvider {
   
   

}

@Measurement

用于控制压测的次数

//测量2次,每次测量的持续时间为20秒
@Measurement(iterations = 2, time = 20 , timeUnit = TimeUnit.SECONDS)

@Warmup

预热,预热可以避免首次因为一些其他因素,如CPU波动、类加载耗时这些情况的影响。

@Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)

参数解释同上。

@Fork

@Fork用于指定fork出多少个子进程来执行同一基准测试方法。

@Threads

@Threads注解用于指定使用多少个线程来执行基准测试方法,如果使用@Threads指定线程数为2,那么每次测量都会创建两个线程来执行基准测试方法。

3、运行

我这里的例子是压测dubbo,源码链接在文末

完整例子:

@BenchmarkMode({
   
   Mode.All})
@Warmup(iterations = 3, time = 5, timeUnit = TimeUnit.SECONDS)
//测量次数,每次测量的持续时间
@Measurement(iterations = 3, time = 10, timeUnit = TimeUnit.SECONDS)
@Threads(32)
@Fork(1)
@State(Scope.Benchmark)
@OutputTimeUnit(TimeUnit.SECONDS)
@Slf4j
public class StressTestProvider 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醋酸菌HaC

请我喝杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值