目录

  • 性能测试
  • java中自己写代码进行代码片段性能测试
  • 使用jmh来进行性能测试

性能测试

java 常用于互联网系统的后台编程,互联网应用往往意味着高并发的产生。在对一个系统进行设计和架构之前,我们需要对他的用户量,每个接口的访问流程以及访问速率进行预估。最大限度的保证系统在高并发下能稳定安全的运行。那么性能测试就是对系统的一种很好的预估,当然性能测试也能让我们发现代码中的一些缺陷和瓶颈点,让我们更好的对系统进行优化。

常用的性能测试工具jmeter和ab工具,这两样工具经常用于接口测试和并发测试。但是往往这些应用于接口,在测试的时候无法对代码的单一片段进行完美的测试,他可能还受带宽,网速以及丢包率的影响。

java中自己写代码进行代码片段性能测试

通常我们在java中的性能测试的时候通常的做法是

long l = System.currentTimeMillis();
//do someThings
long cost = System.currentTimeMillis() - l;
System.out.println(cost);

springbootorg.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

  1. jmh来源于openjdk,有强大的后援支持
  2. jmh 测试可以达到纳秒级,
  3. jmh 提供了一套基于JVM测试的完美测试方案
  4. 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在性能测试中的使用相关推荐

  1. 【JMH】在spring boot中使用jmh进行性能测试

    一.参考资料 在spring boot中使用jmh进行性能测试 - 掘金

  2. 使用JMH进行性能测试

    使用JMH进行性能测试 文章目录 使用JMH进行性能测试 1.什么是JMH 2.JMH使用 3.JMH的基本概念和配置 1.模式(Mode) 2.迭代(Iteration) 3.预热(Warmup) ...

  3. 转:性能测试中的性能测试指标与用户体验分析

    转自:http://www.ltesting.net/ceshi/ceshijishu/xncs/2012/0223/204182_2.html 性能测试中的性能测试指标与用户体验分析 网络应用性能分 ...

  4. 浅谈软件性能测试中关键指标的监控与分析(转)

    浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在 ...

  5. 性能测试中批量数据制作实例的多种方法讨论

    摘 要: JAVA编程批量制造数据,UNIX SHELL脚本批量制造数据,ULTRAEDIT结合EXCEL批量制造数据         关键词: 批量制作数据,ULTRAEDIT,EXCEL,JAVA ...

  6. 性能测试中脚本怎么写_脚本在流程中的性能影响

    性能测试中脚本怎么写 我们经常看到人们出于各种目的而使用脚本(例如,在服务任务,执行侦听器等中). 使用脚本和Java逻辑通常很有意义: 它不需要打包到jar中并放在classpath上 它使流程定义 ...

  7. 【测试沉思录】17. 性能测试中的系统资源分析之四:网络

    作者:马海琴 编辑:毕小烦 计算机网络,就是通过光缆.电缆.电话线或无线通讯将两台以上的计算机互连起来的集合,包括广域网.城域网.局域网和无线网. 计算机网络是传输信息的媒介.我们常说的千兆网,是指网 ...

  8. 关于性能测试中使用物理机和虚拟机的区别

    需要说明的情况,以下对比表格主要针对性能测试: 举例的物理机和虚拟机的数值 CPU  2Ghz 内存 4GB 网卡 100M 硬盘 200G 虚拟机所在的物理机器称之为"宿主机", ...

  9. hint ksql oracle_性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增

    你的位置: 问答吧 -> Oracle -> 问题详情 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增 每天都会报以下信息(alert.log): CJ ...

  10. multisim变压器反馈式_Multisim在负反馈放大器性能测试中的应用

    Multisim 在负反馈放大器性能测试中的应用 苗红宇 [期刊名称] <实验室科学> [年 ( 卷 ), 期] 2016(019)002 [摘要] 在测试负反馈放大器性能时由于受到传统实 ...

最新文章

  1. mysql 性能优化索引、缓存、分表、分布式实现方式。
  2. No qualifying bean of type xxx‘ available 的一种解决方法
  3. hadoop实战二 单机部署2
  4. 网络接口配置-Bonding
  5. 《系统集成项目管理工程师》必背100个知识点-12项目整体管理的过程
  6. PAT_B_1029 旧键盘
  7. 2016-01-18 10:33PM at Parkyard difference between WebUI and Fiori
  8. ZOJ1221 Risk 图形的遍历
  9. python绘图颜色深浅代表数值_画图理解Python的深浅拷贝
  10. @Python 程序员,如何最大化提升编码效率?
  11. 【text】 文本组件说明
  12. Android应用程序反编译
  13. Excel可视化图表模板,图表控的你快收藏呀!!!
  14. Antd Form Upload 报fileList错误-解决方案
  15. 一个宠物商店的程序c语言,C语言-宠物商店管理系统-实训报告
  16. 晚还款没事,各行信用卡容时容差服务大汇总!
  17. win10分屏设置一边竖屏_win10两个显示器横屏和竖屏拓展
  18. 鸿蒙系统第一批升级名单,鸿蒙系统首批升级名单详细介绍
  19. C++中的枚举(enum)
  20. 英语论文写作词汇积累20161101

热门文章

  1. 基于ERP与移动通信平台的商务系统设计
  2. 图像的峰值信噪比(PSNR)的计算方法
  3. 自适应短视频源码php下载,php在线短视频解析下载API源码
  4. 手机充当电脑 麦克风 扬声器 摄像头
  5. C++ gbk与utf8互转
  6. php中文手册 最新评论整合,ThinkPHP整合百度Ueditor
  7. 神经网络二分类输出概率,神经网络二分类预测
  8. 树莓派 40pin IO引脚测试
  9. IR2104驱动原理
  10. 设计开发-API代付系统/自动代付系统