首页 > 其他分享 >SpringBoot集成JMH进行基准测试

SpringBoot集成JMH进行基准测试

时间:2022-10-13 22:06:21浏览次数:70  
标签:集成 java SpringBoot runner openjdk jmh JMH import org

基准测试时评估程序/接口性能的一个有效的方法。笔者早期在网上了解到​​JMH​​这个代码工具。由于之前找到的一些代码不具备项目

实践场景的说服力,通常是一项简单算法,独立小功能模块性的代码,便没有深入了解。

网址:​​https://openjdk.java.net/projects/code-tools/jmh/​

官方说明:

JMH is a Java harness for building, running, and analysing nano/micro/milli/macro benchmarks written in Java and other languages targetting the JVM.

大意:JMH 是一种 Java代码工具,用于构建、运行和分析以 Java 和其他语言编写的以 JVM 为目标的纳米/微秒/毫秒/宏(黑人问号marco这里应该翻译成宏吗) 级基准框架。

笔者今晨忽然想起他和Springboot集合进行基准测试,于是找到了以下一篇文章。

Springboot整合JMH基准测试

直接上代码

pom.xml

<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.21</version>
<scope>test</scope>
</dependency>

<!--<dependency>-->
<!--<groupId>org.openjdk.jmh</groupId>-->
<!--<artifactId>jmh-generator-annprocess</artifactId>-->
<!--<version>1.20</version>-->
<!--<scope>provided</scope>-->
<!--</dependency>-->

 

JMHSpringBootTest.java
import com.xxx.service.DataService;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;

//javascript:void(0)
//@BenchmarkMode(Mode.AverageTime) // 测试方法平均执行时间
//@OutputTimeUnit(TimeUnit.MICROSECONDS) // 输出结果的时间粒度为微秒
@State(Scope.Thread)
public class JMHSpringBootTest {

private ConfigurableApplicationContext context;
private DataService dataService;

public static void main(String[] args) throws RunnerException {
Options options = new OptionsBuilder().include(JMHSpringBootTest.class.getName()+".*")
.warmupIterations(2).measurementIterations(2).forks(1).build();
new Runner(options).run();
}

/**
* setup初始化容器的时候只执行一次
*/
@Setup(Level.Trial)
public void init(){
context = SpringApplication.run(Main.class);
dataService = context.getBean(DataService.class);
}

/**
* benchmark执行多次,此注解代表触发我们所要进行基准测试的方法
*/
@Benchmark
public void test(){
System.out.println(dataService.getDataNode());
}
}

切忌,一定在要控制台使用maven运行,不能单独使用java类,运行报错

 

SpringBoot集成JMH进行基准测试_基准测试

 

 

Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList
at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)
at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:122)
at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:263)
at org.openjdk.jmh.runner.Runner.run(Runner.java:209)
at com.netmarch.covid19.JMHSpringBootTest.main(JMHSpringBootTest.java:21)

以及以下错误:

Error:java: 服务配置文件不正确, 或构造处理程序对象javax.annotation.processing.Processor: Provider org.openjdk.jmh.generators.BenchmarkProcessor could not be instantiated:

java.lang.NoClassDefFoundError: org/openjdk/jmh/generators/core/GeneratorSource时抛出异常错误

 

在terminal输入

mvn clean install

 

运行结果

SpringBoot集成JMH进行基准测试_java_02

 

 

SpringBoot集成JMH进行基准测试_java_03

 本篇算是失败尝试

 

 下一篇:SpringBoot集成JMH进行基准测试2(正确方法)

 

其他参考:

​https://stackoverflow.com/questions/38056899/jmh-unable-to-find-the-resource-meta-inf-benchmarklist​

标签:集成,java,SpringBoot,runner,openjdk,jmh,JMH,import,org
From: https://blog.51cto.com/u_296714/5754707

相关文章