欢迎光临
梦想从学习开始!

使用JMH进行性能测试| 小熊测试

本文主要介绍 使用JMH进行性能测试| 小熊测试,小熊希望对大家的学习或者工作具有一定的参考学习价值,在测试领域有所提升和发展。

  一、背景

  在benchmark的世界里头,分为广义的benchmark和狭义的benchmark(即microbenchmark,中文人称微基准测试)。

  广义的benchmark涵盖很多方面,对于一个分层的web系统来说,可能包括操作系统的、数据库的、网络交互的、应用系统里头的benchmark;microbenchmark是针对一个相对的小的方面来说的,比如针对java系统的microbenchmark,针对数据库负载能力的microbenchmark,针对web服务器的microbenchmark等等。

  而在java里头的microbenchmark又牵涉到许多java编译优化方面的benchmark处理,比如针对普通java应用系统的性能测试,需要预热阶段,是的JIT的优化能达到效果,系统进入稳定状态,尽量控制变量,好得出实验结果。当然,如果本身就是要测试jvm编译优化的,那就可以省去这步了。

  因而,如何知道系统什么时候进入稳定状态,JIT的优化不会对实现结果造成不必要的干扰,就得程序去处理预热阶段,可能比较复杂,不过还好,有人搞了一个JMH的codetool,是的在java里头进行microbenchmark变得异常方便。

  二、工具

  1、jmh

  JMH(JavaMicro-benchmarksHarnessorJuicyMunchyHummus,hardtosayastheydon'ttellyouonthesite)isthelatestandasitcomesoutoftheworkshopoftheverypeoplewhoworkhardtomaketheOpenJDKJVMflyitpromisestodelivermoreaccuracyand

bettertoolingthenmost.

  2、使用方式

  (1)基于maven的配置

  <dependency>

  <groupId>org.openjdk.jmh</groupId>

  <artifactId>jmh-core</artifactId>

  <version>0.4.2</version>

  </dependency>

  (2)HELLOWORLD

  publicclassJMHSample_01_HelloWorld{

  @GenerateMicroBenchmark

  publicvoidwellHelloThere(){

   //thismethodwasintentionallyleftblank.

   }

  }

  (3)命令行运行

  mvncleaninstall

  java-jartarget/benchmarks.jarJMHSample_01`

  (4)main方法里头运行

  publicstaticvoidmain(String[]args)throwsRunnerException{

   Optionsopt=newOptionsBuilder()

   .include(JMHSample_01_HelloWorld.class.getSimpleName())

   .forks(1)

   .build();

   newRunner(opt).run();

  }

  三、参数说明

  1、Mode.Throughput

  在有时限的迭代里头,该方法能被调用多少次

  2、Mode.AverageTime

  方法平均执行时间

  3、Mode.SampleTime

  对方法执行时间进行采样计算

  4、Mode.SingleShotTime

  方法的单次调用时间/一次批处理的总调用时间

  注意点:

  从@State对象读取测试输入并返回计算的结果,方便JMH对冗余代码进行消除;

  如果是测试方法的性能,则避免通过在方法内循环(重复执行方法内原来代码),这样造成方法方法调用次数的减少,结果不准确,应该把循环调用放在方法外头。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小熊分享邦(www.xxfxb.com),希望大家能坚持软件测试之路,谢谢。

赞(0) 打赏
未经允许不得转载:小熊分享邦 » 使用JMH进行性能测试| 小熊测试

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏