zoukankan      html  css  js  c++  java
  • SpringBoot集成JMH进行基准测试

    基准测试时评估程序/接口性能的一个有效的方法。笔者早期在网上了解到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基准测试

    转载地址:https://blog.csdn.net/peng_0129/article/details/100134320

    直接上代码

    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;
    
    //https://blog.csdn.net/peng_0129/article/details/100134320
    //@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类,运行报错


    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进行基准测试2(正确方法)

    其他参考:

    https://blog.csdn.net/kevin_mails/article/details/88943881

    https://blog.csdn.net/wangyadong317/article/details/83215285

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

  • 相关阅读:
    XP下VS2010 数据库实体模型添加代码项使用 ADO.NET DBContext 添加错误
    URL路径优化
    题解poj2096
    对不起
    TELE poj1155 题解
    在 Linux 上创建第一个 Service Fabric Java 应用程序
    关于日常使用Azure MySQL中遇到的连接问题以及排查方法分享
    在 Azure 中创建静态 HTML Web 应用
    修改Linux时区的2种办法
    怎样在 Azure 应用服务中生成和部署 Java API 应用
  • 原文地址:https://www.cnblogs.com/passedbylove/p/12365369.html
Copyright © 2011-2022 走看看