JMH在性能测试中的使用
目录
- 性能测试
- java中自己写代码进行代码片段性能测试
- 使用jmh来进行性能测试
性能测试
java
常用于互联网系统的后台编程,互联网应用往往意味着高并发的产生。在对一个系统进行设计和架构之前,我们需要对他的用户量,每个接口的访问流程以及访问速率进行预估。最大限度的保证系统在高并发下能稳定安全的运行。那么性能测试就是对系统的一种很好的预估,当然性能测试也能让我们发现代码中的一些缺陷和瓶颈点,让我们更好的对系统进行优化。
常用的性能测试工具jmeter和ab工具,这两样工具经常用于接口测试和并发测试。但是往往这些应用于接口,在测试的时候无法对代码的单一片段进行完美的测试,他可能还受带宽,网速以及丢包率的影响。
java中自己写代码进行代码片段性能测试
通常我们在java中的性能测试的时候通常的做法是
long l = System.currentTimeMillis();
//do someThings
long cost = System.currentTimeMillis() - l;
System.out.println(cost);
在springboot
中org.springframework.util.StopWatch
就是采用这样的用法
public class StopWatch {private final String id;private boolean keepTaskList;private final List<StopWatch.TaskInfo> taskList;private long startTimeNanos;......private int taskCount;private long totalTimeNanos;......
}
public static final class TaskInfo {private final String taskName;private final long timeNanos;
}
或者测试粗化
long l = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){//do something
}
long cost = System.currentTimeMillis() - l;
System.out.println(cost);
使用jmh来进行性能测试
什么是jmh
jmh 即 (Java Microbenchmark Harness)中文大多数翻译为 JAVA 微基准测试套件,官方给出的解释是
JMH is a Java harness for building, running, and analysing nano/micro/milli/macro benchmarks written in Java and other languages targeting the JVM.
(jmh 是 一种 用java以及其他JVM语言编写的用于构建运行和分析的一种工具)
github : https://github.com/openjdk/jmh
为什么要使用jmh
- jmh来源于openjdk,有强大的后援支持
- jmh 测试可以达到纳秒级,
- jmh 提供了一套基于JVM测试的完美测试方案
- jmh 提供了一套性能测试的图表以及结果展示方案
怎么使用jmh
依赖中加入
<dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>1.23</version></dependency><dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>1.23</version></dependency>
样例代码
https://github.com/openjdk/jmh/tree/master/jmh-samples/src/main/java/org/openjdk/jmh/samples
注解
Benchmark
标记测试的方法
BenchmarkMode
名称 | 解释 | 单位 |
---|---|---|
Mode.Throughput | operations per unit of time.(单位时间执行的次数) | ops/time |
Mode.AverageTime | average time per per operation(每个方法执行的平均时间) | time/op |
Mode.SampleTime | samples the time for each operation.(每个方法执行的时间) | time |
Mode.SingleShotTime | measures the time for a single operation.(单个的执行时间) | |
All | all the benchmark modes. (上面所有都执行一次) |
OutputTimeUnit
统计的时间单位
Warmup
预热,因为java中涉及到JIT热编译。为了消除这部分代码的影响,我们需要对代码进行预热
参数 | 解释 |
---|---|
iterations | 预热次数 |
time | 预热时间 |
timeUnit | 预热时间单位 |
batchSize | 同时预热 |
State
名称 | 描述 |
---|---|
Benchmark | 所有测试共享线程。做多线程的时候使用 |
Group | 每一组中共享线程 |
Thread | 每一个方法或者类共享线程 |
Setup
Setup marks the fixture method to be run before the benchmark.
在测试类运行前运行
TearDown
TearDown marks the fixture method to be run after the benchmark.
在测试类后运行
OperationsPerInvocation
OperationsPerInvocation annotations allows to communicate the benchmark does more than one operation, and let JMH to adjust the scores appropriately.
大致来说,就是把一个方法的执行时间按比例缩小N倍,如果一个方法中执行了循环,可能用到
Fork
就是测试中产生进程的数量
GroupThreads
GroupThreads defines how many threads are participating in running a particular {@link Benchmark} method in the group
定义一个组内线程数
Measurement
执行的次数,和预热参数一样。这里就不解释了
Param
参数,定义入参。
JMH在性能测试中的使用相关推荐
- 【JMH】在spring boot中使用jmh进行性能测试
一.参考资料 在spring boot中使用jmh进行性能测试 - 掘金
- 使用JMH进行性能测试
使用JMH进行性能测试 文章目录 使用JMH进行性能测试 1.什么是JMH 2.JMH使用 3.JMH的基本概念和配置 1.模式(Mode) 2.迭代(Iteration) 3.预热(Warmup) ...
- 转:性能测试中的性能测试指标与用户体验分析
转自:http://www.ltesting.net/ceshi/ceshijishu/xncs/2012/0223/204182_2.html 性能测试中的性能测试指标与用户体验分析 网络应用性能分 ...
- 浅谈软件性能测试中关键指标的监控与分析(转)
浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø 评价系统当前性能,判断系统是否满足预期的性能需求. Ø 寻找软件系统可能存在 ...
- 性能测试中批量数据制作实例的多种方法讨论
摘 要: JAVA编程批量制造数据,UNIX SHELL脚本批量制造数据,ULTRAEDIT结合EXCEL批量制造数据 关键词: 批量制作数据,ULTRAEDIT,EXCEL,JAVA ...
- 性能测试中脚本怎么写_脚本在流程中的性能影响
性能测试中脚本怎么写 我们经常看到人们出于各种目的而使用脚本(例如,在服务任务,执行侦听器等中). 使用脚本和Java逻辑通常很有意义: 它不需要打包到jar中并放在classpath上 它使流程定义 ...
- 【测试沉思录】17. 性能测试中的系统资源分析之四:网络
作者:马海琴 编辑:毕小烦 计算机网络,就是通过光缆.电缆.电话线或无线通讯将两台以上的计算机互连起来的集合,包括广域网.城域网.局域网和无线网. 计算机网络是传输信息的媒介.我们常说的千兆网,是指网 ...
- 关于性能测试中使用物理机和虚拟机的区别
需要说明的情况,以下对比表格主要针对性能测试: 举例的物理机和虚拟机的数值 CPU 2Ghz 内存 4GB 网卡 100M 硬盘 200G 虚拟机所在的物理机器称之为"宿主机", ...
- hint ksql oracle_性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增
你的位置: 问答吧 -> Oracle -> 问题详情 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增 每天都会报以下信息(alert.log): CJ ...
- multisim变压器反馈式_Multisim在负反馈放大器性能测试中的应用
Multisim 在负反馈放大器性能测试中的应用 苗红宇 [期刊名称] <实验室科学> [年 ( 卷 ), 期] 2016(019)002 [摘要] 在测试负反馈放大器性能时由于受到传统实 ...
最新文章
- mysql 性能优化索引、缓存、分表、分布式实现方式。
- No qualifying bean of type xxx‘ available 的一种解决方法
- hadoop实战二 单机部署2
- 网络接口配置-Bonding
- 《系统集成项目管理工程师》必背100个知识点-12项目整体管理的过程
- PAT_B_1029 旧键盘
- 2016-01-18 10:33PM at Parkyard difference between WebUI and Fiori
- ZOJ1221 Risk 图形的遍历
- python绘图颜色深浅代表数值_画图理解Python的深浅拷贝
- @Python 程序员,如何最大化提升编码效率?
- 【text】 文本组件说明
- Android应用程序反编译
- Excel可视化图表模板,图表控的你快收藏呀!!!
- Antd Form Upload 报fileList错误-解决方案
- 一个宠物商店的程序c语言,C语言-宠物商店管理系统-实训报告
- 晚还款没事,各行信用卡容时容差服务大汇总!
- win10分屏设置一边竖屏_win10两个显示器横屏和竖屏拓展
- 鸿蒙系统第一批升级名单,鸿蒙系统首批升级名单详细介绍
- C++中的枚举(enum)
- 英语论文写作词汇积累20161101