使用JMH进行性能测试
作者:网络转载 发布时间:[ 2016/6/16 15:06:51 ] 推荐标签:软件测试 性能测试 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对冗余代码进行消除;
如果是测试方法的性能,则避免通过在方法内循环(重复执行方法内原来代码),这样造成方法方法调用次数的减少,结果不准确,应该把循环调用放在方法外头。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11