17 | Benchmark测试(上):如何做好微基准测试?
尉刚强
你好,我是尉刚强。从这节课开始,我们就进入了课程的第三个模块:性能看护篇。接下来,我们会用 5 节课的时间,来学习和掌握性能测试的核心理论、测试工具的选择和使用,并理解如何才能更好地集成在流水线中监控软件产品性能的能力。
今天,我们先来了解下基准测试(Benchmark)的分类,并重点学习下在进行微基准测试时都会碰到哪些问题,以及高效实现微基准测试的方法步骤和手段。
现在,我想先问你一个问题:软件为什么要进行基准测试呢?
实际上,从软件生命周期的视角来看,由于新需求的不断引入,导致软件实现在持续不断地演进与变化,而在这个过程中,软件的熵会不断增大,同时软件的性能也很容易被不断地劣化。所以说,性能优化是一个持续改进的过程,如果没有好的措施来看护软件的性能基线,就很容易导致软件系统的性能长期处于不稳定的状态。
那么,基准测试的目的,就是为软件系统获取一个已知的基线水平。这样,当软件修改变化导致性能发生劣化的时候,我们就可以在第一时间发现问题。
但是,如何对软件系统做好基准测试,是一件非常有挑战的事情!我举个简单的例子,有些互联网 SaaS 服务在进行性能测试时,需要很大规模的用户接入,可是这在测试场景下是很难构造的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了基准测试的重要性以及在微基准测试中需要注意的问题和解决方法。作者首先解释了软件为何需要进行基准测试,指出性能优化是一个持续改进的过程,而基准测试的目的是为软件系统获取一个已知的基线水平,以便在软件修改变化导致性能劣化时及时发现问题。文章分析了微基准测试中的核心挑战与难点,重点讨论了JIT对代码实现性能测试的影响,以及测量时间的精度问题。针对JIT的影响,作者提出了使用充足的代码预热来避免JIT对微基准性能测试带来的干扰。对于测量时间的精度问题,文章指出在进行微基准测试时,不能太依赖底层接口获取的测量时间精度,需要在基于波动的测量结果的前提下,尽量准确地获取平均测量结果,以支撑性能分析。此外,文章还介绍了实施微基准测试的步骤方法,包括确定软硬件运行环境、选择被测方法、开发测试用例、执行测试和分析变化趋势。最后,文章详细介绍了JMH测试框架如何帮助完成微基准测试,包括配置预热时间、基准测试运行时间、测试模式和结果输出等。整体而言,本文为想要深入了解性能测试的读者提供了重要参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能优化高手课》,新⼈⾸单¥59
《性能优化高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- 公号-技术夜未眠老师好,昨天线上出现了一个整体,在5分钟内,数据库出现卡顿,在该数据库上的所有表操作上的所有sql写执行都出现慢操作,持续了5分钟左右,5分钟后又都恢复了正常。分析了半天,没有得出有效结论,请问老师可能是什么原因?谢谢老师
作者回复: 这个可能原因比较多,不同数据库原因也不一样,可能数据库内部并发锁的问题,或者磁盘IO问题等等,可以通过数据库的慢查询日志分析下。
2021-06-24 - 小川比如对于 Java 语言来说,JMH 就是首选的微基准性能测试框架;而对 C/C++ 语言而言,Google Benchmark 则是首选的微基准测试框架。 对于python呢?2022-07-08
- 小川比如对于 Java 语言来说,JMH 就是首选的微基准性能测试框架;而对 C/C++ 语言而言,Google Benchmark 则是首选的微基准测试框架。2022-07-08
收起评论