本文主要是介绍压力测试:JMH基础介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网上一堆文章介绍,如下:
JMH官方例子
Introduction to JMH
Java 并发编程笔记:JMH 性能测试框架
Java微基准测试框架JMH
JMH性能测试框架
常数折叠
循环展开
Using annotation processor in IDE
主要关注的参数:
| 解释 | 参数解释 |
---|---|---|
| 解释 | 参数解释 |
@BenchmarkMode(Mode.Throughput) | Mode 表示 JMH 进行 Benchmark 时所使用的模式。通常是测量的维度不同,或是测量的方式不同。目前 JMH 共有四种模式:
| Throughput: 整体吞吐量,例如“1秒内可以执行多少次调用”。 |
@Warmup(iterations = 1) | Warmup 是指在实际进行 benchmark 前先进行预热的行为。 为什么需要预热? 因为 JVM 的 JIT 机制的存在,如果某个函数被调用多次之后,JVM 会尝试将其编译成为机器码从而提高执行速度。为了让 benchmark 的结果更加接近真实情况就需要进行预热
| Iteration 是 JMH 进行测试的最小单位。在大部分模式下,一次 iteration 代表的是一秒,JMH 会在这一秒内不断调用需要 benchmark 的方法,然后根据模式对其采样,计算吞吐量,计算平均执行时间等。 iterations:预热的次数。 |
@Threads(100) | 每个进程中的测试线程,可用于类或者方法上。一般选择为cpu乘以2。如果配置了 Threads.MAX ,代表使用 Runtime.getRuntime().availableProcessors() 个线程。 | |
@State(Scope.Benchmark) | 类注解,JMH测试类必须使用@State注解,State定义了一个类实例的生命周期,可以类比Spring Bean的Scope。由于JMH允许多线程同时执行测试,不同的选项含义如: | Scope.Thread:默认的State,每个测试线程分配一个实例; Scope.Benchmark:所有测试线程共享一个实例,用于测试有状态实例在多线程共享下的性能; Scope.Group:每个线程组共享一个实例; |
@Measurement(iterations = 2, time = 600, timeUnit = TimeUnit.MILLISECONDS) | 度量,其实就是一些基本的测试参数。 | iterations 进行测试的轮次 |
@OutputTimeUnit(TimeUnit.MILLISECONDS) | benchmark 结果所使用的时间单位,可用于类或者方法注解,使用java.util.concurrent.TimeUnit中的标准时间单位。 | |
@Benchmark | 方法注解,表示该方法是需要进行 benchmark 的对象。 | |
public static void main(String[] args) throws RunnerException {Options options = new OptionsBuilder().include(LettuceBenchmarkTest.class.getSimpleName()).output("log.home_IS_UNDEFINED/lettuceAsync-Throughput.log").forks(2).build();new Runner(options).run(); } |
| |
例子:lettuce 共享连接 https://singgel.blog.csdn.net/article/details/105583251
这篇关于压力测试:JMH基础介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!