一、benchmark概念

在计算中,基准是运行一个计算机程序、一组程序或其他操作的行为,以评估一个对象的相对性能,通常是通过对它运行一些标准测试和试验。

基准测试一词也通常用于精心设计的基准测试程序本身。

基准测试通常与评估计算机硬件的性能特征有关,例如CPU的浮点性能运算性能,但在某些情况下该技术也使用于软件。如,软件基准测试针对编译器或者数据库管理系统(DBMS)运行。

基准测试提供了一种比较不同芯片、系统架构中各种子系统性能的方法。

核心定义:通过设计合理的测试方法,选用合适的测试工具和被测系统,实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。

二、基准测试的关键点:

  • 测试方法:到底使用微基准测试,介基准测试,还是使用宏基准测试,需要根据我们的需要选择一个合适的。
  • 测试工具:选择合适的测试工具,能更好的精确的测量出我们的数据。
  • 某个目标场景:性能测试时,往往需要选择一些场景。比如到底只是达到某个比较低的标准即可,还是想直接把系统压死等等
  • 某项性能指标:需要知道这一次到底追求的是哪个性能指标,到底是QPS还是吞吐量,还是TP99等等。
  • 可对比:用不同的方法或者工具进行多次测试进行数据对比

三、测试方法:

(一)微基准测试

微基准测试(Micro-benchmarks)是基准测试中的一种方法,用来测试微小代码单元的性能,通常这个微小代码单元可以是一段算法,一个方法,一个数据结构。

(二)宏基准测试

宏基准测试(macro-benchmark),顾名思义和上面的测试相反,往往会测试一个应用的整体性能,比如模拟大量的真实用户使用这个应用,从而测试出性能。很多时候我们的全链路压测基本就会对应宏基准测试,测试所需要的的流程以及环境都和真实场景一样,这样才能真正的测试出整个应用性能的问题。在真正的全链路压测的情况下,往往会把真实的请求数据先复制下来,然后收集足够多的数据之后,利用这些真实的数据来进行压测。

(三)介基准测试

宏基准测试对于很多场景比较重,这个时候就出现了介基准测试,介基准测试没有要求请求的真实,在整个链路上一些不是很重要的地方在介基准测试中都可以进行忽略,比如登录验证,安全验证等等,将测试的目标聚焦在我们的业务核心上,通过介基准测试能让我们更简便的测试出系统的性能。

四、测试工具

(一)JMeter

Apache JMeter是Apache组织开发的基于Java的压力测试工具。它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。同时JMeter支持对性能压测结果做图形分析。

JMeter通常是一个模拟用户就是一个线程,当模拟并发数变多的时候性能会下降,通常会搭建一个JMeter集群去模拟并发数较多的情况。

(二)Gatling

Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等。

Gatling对Java选手来说有一定的学习成本,并且Gatling国内好像使用得较少,但是Gatling使用得Akka Actors异步模型,他可以使用少量的线程就能支持高并发,不需要像JMeter一样搭建多个集群去使用。Gatling在我们公司使用得较多,目前只能测试Http相关的,如果要测试rpc相关的需要先将rpc协议转换成Http协议。

(三)全链路压测PTS/自研

上面的方法都不能用来做全链路压测,都缺少很多核心功能,比如请求录制,定时压测,实时监控,报告分析等等,这个时候我们可以直接使用阿里云的PTS进行全链路压测,或者自研一套基于自己业务系统的全链路压测系统。

五、性能指标

通常进行基准测试的时候,在结果中会有很多需要值得关注的目标,下面列举一些比较重要的。

(一)QPS/TPS(衡量吞吐量)

QPS是我们的每秒查询数量,TPS是每秒的事务数量。通常我们进行基准测试往往会定一个目标,比如支撑1000QPS的请求量来完成我们的目标,或者测试出我们这个系统极限的QPS是多少,同样的QPS也不是越大越好,也需要结合我们的响应时间,如果我们一味的追求QPS忽略了响应时间那么用户的体验也是极差的。

(二)TP99/TP95

有很多认为响应时间应该看平均时间,如果写要求比较低的系统的确是可以看平均时间,这样就会导致很多用户响应的速度很慢,但是我们在监控指标上体现不出来,所以就有了百分位指标这样的概念,TP99的意思就是,取排名排到第99百分位的响应时间,即排除了一些异常的情况(剩余的那1%),又保证了大多数用户的响应时间。(平均响应时间、最小响应时间、最大响应时间、时间百分比等,其中时间百分比参考意义较大,如前95%的请求的最大响应时间。)

(三)CPU(并发量)

当我们有很多CPU密集型应用的时候,可以多多关注CPU的情况,从而进行针对性的调优

(四)GC

如果是Java的应用,GC问题绝对不会缺席,尤其是在我们基准测试中,往往如果在测试中出现了大量的GC,说不定是代码写得有问题,有时候可以通过代码进行优化,或者说也可以更换GC收集器。

(五)io

当我们传输的数据比较多的时候,比如传输文件,或者一些大的数据结构,这个时候就需要关注I/O相关的问题,来进行针对的调优。

六、可对比

可对比同样是基准测试的重要点,通常有下面的几个点:

  • 使用不同的测试工具做对比
  • 使用不同的测试数据做对比
  • 使用不同的测试环境做对比
  • 建立长期的基准测试,进行不同时间的基准测试对比。

通常基准测试就是要随时进行测试因子变量的变更,我们才能真正的得到最优的测试结果。

参考:聊聊基准测试 - 云+社区 - 腾讯云 (tencent.com)

【压测】基准测试、性能测试、压力测试--Sysbench_ITPUB博客

https://en.m.wikipedia.org/wiki/Benchmark_(computing)

Benchmark(基准测试)初相识相关推荐

  1. 数据可视化组队学习:《Task01 - Matplotlib初相识》笔记

    第一回:Matplotlib初相识 本文为组队学习任务01学习笔记. Matplotlib简要总结 Matplotlib的结构 一个完整的Matplotlib图像包括四个层级: Figure:容纳所有 ...

  2. mysqldump单个库导出_初相识 | 全方位认识 sys 系统库

    前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库.在我们的发布计划中为什么要把performance ...

  3. (二)HTTP初相识--了解HTTP协议

    HTTP初相识--了解HTTP协议 浏览器背后的故事 HTTP协议的前世今生 透过TCPIP看HTTP DNS域名解析 回溯HTTP事务处理过程 与HTTP请求的第一次亲密接触 浏览器背后的故事 通过 ...

  4. 数据可视化系列(一):Matplotlib初相识

    前言 期待了好久的datawhale可视化教程终于出来了,这次标题狠有文艺范儿,哈哈哈 这次我主要目的是最近要写篇论文,也正好为以后建模画图打捞基础~ 大家可以多看看官方教程: 中文官方网站:http ...

  5. 【自动驾驶摸爬滚打路】自动驾驶仿真软件SCANeR 001初相识

    自动驾驶仿真软件SCANeR 001初相识 最近开始学习使用自动驾驶仿真软件SCANeR Studio 于是乎找了一圈,好像没有发现这个软件的pojie版 于是上官网申请试用版 AVSimulatio ...

  6. matplotlib可视化初相识

    目录 第一回:Matplotlib初相识 一.认识matplotlib 二.一个最简单的绘图例子 三.Figure的组成 四.两种绘图接口 五.通用绘图模板 第一回:Matplotlib初相识 一.认 ...

  7. Hive查询系列之初相识

    Hive查询系列之初相识 1 基本查询(select--from) 1.1 全表和特定列查询 0)数据准备 (0)原始数据 dept: 10 ACCOUNTING 1700 20 RESEARCH 1 ...

  8. 学习打卡1-Matplotlib初相识

    学习打卡1-Matplotlib初相识 一.认识matplotlib matplotlib是受MATLAB的启发构建的.MATLAB是数据绘图领域广泛使用的语言和工具.MATLAB语言是面向过程的.利 ...

  9. 初相识 | 全方位认识 sys 系统库

    前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库.在我们的发布计划中为什么要把performance ...

最新文章

  1. 多目标线性规划求解方法及matlab实现
  2. url 参数 后台 加密_一套拿来即用的后台管理系统,非常方便(附项目地址)
  3. 图解设计模式-Abstract Factory模式
  4. 【以太坊智能合约】Embark Framework 开发基础篇
  5. MFC动态创建控件并响应事件代码实现过程
  6. 使用HANA Web-based Development Workbench创建最简单的Server Side JavaScript
  7. 单片机 | 3种时钟电路方案对比,你常用哪一种?
  8. Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别
  9. html5的form如何使用方法,HTML5 FormData方法介绍
  10. linux多进程spawn,【Linux Shell脚本编程】expect解决脚本交互 + Shell的多进程处理
  11. Matlab在高等数学中应用
  12. fortan dll在本地可以运行成功,移植到其他电脑上报错Exception in thread main java.lang.UnsatisfiedLinkError: 找不到指定的模块。
  13. 好好编程-物流项目21【订单管理-新增订单】
  14. 从零开始自制实现WebServer(一)---- 万丈高楼平地起 步子得一步一步慢慢走
  15. dcos 架构官方文档
  16. 汽车SoC安全故障的自动识别(下):案例展示和指标分析
  17. Pandas 02-基础
  18. Wide Deep模型的理解及实战(Tensorflow)
  19. 【UE4教程】Unreal 4.22 UI显示指定物体-实时渲染
  20. Lintcode 428. Pow(x, n) (Medium) (Python)

热门文章

  1. 线性抛物方程的通用有限差分格式及代码(未完)
  2. 原码一位乘法(2020-03-27)
  3. 网络工程师----成长之路
  4. COleDateTime ParseDateTime 方法
  5. xgboost对应python版本下载(win10)
  6. CFileDialog文件对话框
  7. glDrawElements 绘制立方体共用顶点的法线和UV处理
  8. HTTP 404错误你知道是什么意思吗
  9. C++ 不快乐的函数 1
  10. CVPR2020 | 即插即用!将双边超分辨率用于语义分割网络,提升图像分辨率的有效策略...