当前位置: 首页 > news >正文

Benchmark学习笔记

小记一篇Benchmark的学习笔记

1.什么是benchmark

在维基百科中,是这样子讲的

“As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, tests were developed that allowed comparison of different architectures.”

大致意思就是,随着计算机体系结构的进步,我们无法再简简单单的从他们的特性去比较计算机系统的性能,所以就诞生了我们今天的主角  `Benchmark` !!

  • Benchmark : "基准测试" 是一种用于衡量和评估系统性能的方法。在计算机领域,它通常指的是通过运行一系列标准化的测试来评估硬件或软件的性能。基准测试可以帮助人们比较不同系统、不同组件或不同配置之间的性能差异!!!

其实,用自己的话来说就是:

  • 通过相应的工具,手段,对硬件组件 ,软件应用程序如CPU性能、内存带宽、硬盘读写速度等单个组件或整个系统进行测试,并且将多次测量得到的结果用于性能的评估和比较,优化和调整,成为日后产品上市的决策支持等!!

下面,我们就来详细的讲解一下Benchmark的过程!!

2.确认测试的目标

对于每一次测试,我们都要选择对应的目标,这样才便于我们后续的数据分析和对比

如果目标是一个数据库,那么就可以从以下角度出发

  1. 查询性能:就拿mysql为例子,像这种查询遇到数据量大的,可以通过记录查询的执行时间或者查询的吞吐量来评估
  2. 并发连接数 :在现实生活中,我们可能会遇到大量用户同时对数据库进行查询,么我们通过增加并发的数据库连接数,并观察数据库的响应时间和系统资源利用率来评估
  3. 数据插入和更新性能:在sql注入中,有一些服务器会对User_Agent Cookie Refer头进行存储,那么就会用到mysql里面的 update 或者insert,那么,我们就可以观察插入和更新大量数据时的性能表现,包括单条数据的插入/更新性能和批量数据的插入/更新性能

如果他是一个网络服务系统,那么我们就可以从以下角度出发

  1. 响应时间 :用户在对服务其发送请求,然后经过服务器的处理,再返回给用户,这期间需要的时间就是响应时间我们通过记录这些时间,可以评估整个请求-响应周期的性能表现。
  2. 吞吐量:吞吐量可以表示为每秒处理的请求数量或每秒传输的数据量,它反映了系统的处理能力和性能瓶颈。
  3. 并发连接数:我们可以通过一些测试软件,如jmeter等工具,在一瞬间建立多并发连接数量,用来模拟在某一时刻的大量用户涌入的情景,然后通过观察系统的响应时间和资源利用率,可以评估系统的并发性能和资源消耗情况
  4. 稳定性和可靠性 ,在上面建立多并发的基础上我们还可以通过观察系统的稳定性和异常处理能力,可以评估系统在各种条件下的表现

3.选择合理的测试工具

还是拿上面的两个测试目标来举例子

网络服务系统

  1. Apache JMeter:Apache JMeter是一款功能强大的开源性能测试工具,主要用于测试各种类型的网络服务系统,包括Web应用程序、Web服务、数据库服务器等它支持多线程测试、分布式测试、图形化测试结果展示等功能,非常适合进行负载测试和压力测试
  2.   这个工具经常用来压力测试
  3. Gatling:Gatling是一款基于Scala语言开发的现代化性能测试工具,特别适用于高并发场景下的性能测试。它采用基于DSL(领域特定语言)的方式进行测试脚本编写,支持使用Scala语言进行自定义脚本开发,具有良好的可扩展性和灵活性。
  4. Wrk:Wrk是一款简单而强大的HTTP性能测试工具,适用于对HTTP服务进行高并发的压力测试。它采用多线程和非阻塞I/O的方式进行测试,并能够生成详细的测试报告和统计信息。

相信大家都发现了,只要是网络服务系统,压测它的工具一般都多并发,多线程的压力测试工具

                         

数据库

  1. SysBench:SysBench 是一个跨平台的基准测试工具,支持多种数据库系统,包MySQL、PostgreSQL、MariaDB 等。它可以用于测试数据库的性能、并发连接数、事务处理能力
  2. HammerDB:HammerDB 是一个开源的基准测试工具,主要用于测试关系型数据库系统,如 Oracle、SQL Server、DB2 等。它提供了丰富的基准测试场景和工具,可以模拟真实的数据库工作负载并评估数据库的性能表现
  3. Percona Toolkit:Percona Toolkit 是一个由 Percona 公司提供的一套 MySQL 和 MongoDB 管理工具,其中包括一些基准测试工具,如 pt-query-digest、pt-upgrade 等,可以用于评估和优化数据库的性能。

4.准备测试环境

这个也是非常重要的一步,我们需要保测试环境的稳定性和一致性,包括硬件配置、操作系统版本、驱动程序版本等。关闭不必要的后台任务和服务,以确保测试结果的准确性。

5.执行基准测试

当变量都设置好之后,现在开始进行测试。从基准线开始进行测试(已知的起点),并有系统地调整服务器设置。每个测试序列都会有一个结果,记录结果以便以后引用。在这种情况下,一个测试序列可看做是一次硬件设置更改。每应用一次新的设置,都必须重新进行测试并记录结果。一旦有足够的运行周期,工程师应该有一份完整的数据以完成他们的推论。

6.收集测试执行结果

其中包括各种性能指标的数据,如响应时间、吞吐量、并发连接数等。使用工具提供的报告功能或自定义脚本来自动化数据收集过程。

7.分析和比较结果

在这个步骤中,我们需要进行以下步骤

  1. 总体性能评估:首先,对系统的总体性能进行评估。这包括查看各项性能指标的平均值、中位数、标准差等统计数据,以了解系统的整体表现。

  2. 识别性能瓶颈:通过分析测试结果,识别系统性能的瓶颈所在。这可能包括响应时间较长的操作、吞吐量不足的任务、并发连接数过高导致的系统资源耗尽等。通过识别性能瓶颈,可以确定优化的重点和方向。

  3. 比较不同场景下的性能数据:如果进行了多个测试场景的基准测试,需要比较不同场景下的性能数据。这可以帮助确定系统在不同条件下的性能表现,并找出最佳的配置和参数组合。

  4. 对比不同系统或组件的性能:如果进行了多个系统或组件的基准测试,需要对比它们的性能数据。这可以帮助选择最适合自己需求的系统或组件,并确定哪些系统或组件需要进一步优化。

  5. 查找异常数据和趋势:检查测试结果中的异常数据和趋势。这可能包括某些测试任务的性能突然下降或波动、系统资源利用率异常高或异常低等。通过查找异常数据和趋势,可以发现系统中的问题并及时解决。

这个步骤就像计算机取证的分析的重要性一样

通过分析和比较基准测试结果意味着对测试数据进行详细的研究和比较,以便从中获取有用的见解和信息。这个过程的目的是为了理解系统的性能表现,识别潜在的问题或瓶颈,并确定优化的方向。

8.提出优化建议

Benchmark的一个最终的目的,就是提出优化建议

在测试中通常会选择一个或多个基准模型作为比较的标准。这些基准模型可以是已知的、在该任务上表现良好的模型,用来与新的方法进行比较 

当然了,除了需要从网上寻求相应的标准来进行对比以外,我们还需要根绝自身的特殊情况(如服务器的运存等条件)进行综合的测试


分析问题原因:针对性能瓶颈和问题,深入分析其根本原因。这可能涉及到系统的架构设计、代码实现、数据库优化、网络配置等方面的问题。通过分析问题原因,可以确定优化的方向和重点。


9.验证和重复测试 

 你以为做完上面的就完事了吗?? 肯定不是!!!

当我们得到了上面的测试和分析结果之后,我们还要去对这些结果进行进一步测试,因为我们不确定时候改进后的参数是否还会符合要求 理由如下:

  1. 确认优化效果:优化措施的实施并不总是能立即带来明显的改善。通过验证和重复测试,可以确认优化措施的实际效果是否与预期一致这有助于确定哪些优化是有效的,哪些需要进一步改进。

  2. 评估系统稳定性优化措施可能会对系统的稳定性产生影响。通过验证和重复测试,可以评估优化措施对系统稳定性的影响,并及时发现和解决潜在的问题,以确保系统的稳定运行。

  3. 排除误差和变化:基准测试结果可能受到各种因素的影响,如测试环境的变化、测试工具的误差等。通过重复测试,可以排除这些误差和变化的影响,确保测试结果的可靠性和一致性。

  4. 验证优化建议的可行性:重复测试可以验证提出的优化建议的可行性和有效性。如果优化建议在多次测试中都能得到相似的结果,那么说明该建议是可行的,并且对系统性能有实际的改进作用。

  5. 持续改进和优化:系统的性能优化是一个持续改进的过程。通过验证和重复测试,可以不断地评估系统的性能,并根据测试结果进行调整和优化,以满足不断变化的需求和挑战。

10.做出最终的建议

通过与第一次的结果进行对比,选出最优的结果,并且根据以下参考,做出建议

数据库优化

  • 索引优化:评估数据库的索引使用情况,根据查询模式和频率优化索引设计。
  • 查询优化:审查并优化复杂、低效的查询语句,确保查询执行效率高。
  • 表结构优化:评估数据库表结构,合理设计和规划表之间的关系,以及字段的数据类型和长度。
  • 缓存策略优化:考虑使用缓存技术来减轻数据库压力,提高数据访问速度。

网络服务优化

  • 响应时间优化:优化网络服务的响应时间,包括优化代码、减少网络延迟、使用高效的数据传输协议等。
  • 并发处理优化:评估系统的并发处理能力,优化并发处理策略和线程池配置,提高系统的并发处理能力。
  • 负载均衡优化:考虑使用负载均衡技术来平衡服务器负载,确保系统的稳定性和可靠性。

应用程序优化

  • 代码优化:审查并优化应用程序的代码,提高代码的执行效率和性能。
  • 内存管理优化:优化内存使用,包括减少内存泄漏、优化内存分配和释放策略等。
  • 异步处理优化:考虑使用异步处理技术来提高系统的并发处理能力和响应速度。

等等.........

相关文章:

Benchmark学习笔记

小记一篇Benchmark的学习笔记 1.什么是benchmark 在维基百科中,是这样子讲的 “As computer architecture advanced, it became more difficult to compare the performance of various computer systems simply by looking at their specifications.Therefore, te…...

Linux中的动静态库

目录 一、静态库 (1)静态库的优缺点: (2)Linux下静态库的创建和执行 1.直接编译​编辑 2.指定路径和库名 3.用LIBRARY_PATH环境变量来配置路径 二、动态库 (1)动态库的优缺点 &#xff…...

C/C++基础语法

C/C基础语法 文章目录 C/C基础语法头文件经典问题链表链表基础操作 秒数转换闰年斐波那契数列打印n阶菱形曼哈顿距离菱形图案的定义大数计算 输入输出格式化输入输出getline()函数解决cin只读入一个单词的问题fgets读入整行输出字符数组(两种方式puts和printf&#…...

Home Assistant:基于Python的智能家居开源系统详解

Home Assistant:基于Python的智能家居开源系统详解 在数字化和智能化的时代,智能家居系统成为了现代家庭的新宠。它们能够让我们更加方便地控制家中的各种设备,实现自动化和个性化的居住体验。其中,Home Assistant作为一款基于Pyt…...

使用vscode进行简单的多文件编译

安装好必要的插件后(如C/C,code runner等)默认生成task.json即可进行单文件运行 涉及到多文件情况可以修改task.json如下: {"version": "2.0.0","tasks": [{"type": "cppbuild&quo…...

Python实现PPT演示文稿中视频的添加、替换及提取

无论是在教室、会议室还是虚拟会议中,PowerPoint 演示文稿都已成为一种无处不在的工具,用于提供具有影响力的可视化内容。PowerPoint 提供了一系列增强演示的功能,在其中加入视频的功能可以大大提升整体体验。视频可以传达复杂的概念、演示产…...

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC (Multiversion Concurrency Control)多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…...

Linux下如何生成coredump文件

引言 在linux下执行程序,当出现coredump时,却发现没有生成core文件,或者生成了core文件却不知道在哪里,下面就讲述如何产出core文件,以及指定core文件的产出格式与路径。 打开core文件的大小限制 ulimit -c unlimit…...

eltable 合计行添加tooltip

eltable 合计行添加tooltip 问题描述: eltable 合计行单元格内容过长会换行,需求要求合计行数据超长显示 … ,鼠标 hover 时显示提示信息。 解决方案:eltable合计行没有对外的修改接口,想法是 自己实现一个tooltip&a…...

Secure Boot(安全启动)

Secure Boot(安全启动)的原理基于链式验证,这是一种确保计算机在启动过程中只加载和执行经过认证的软件的机制。这个过程涉及到硬件、固件和操作系统的多个层面。以下是Secure Boot的基本原理: 密钥和证书:Secure Boot…...

大厂面试经验:如何对加密后的数据进行模糊查询操作

加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路。 为了数据安全我们在开发过程中经常会对重要的数据进行加密存储,常见的有:密码、手机号、电话号码、详细地址、银行卡号、信用卡验证码等信息…...

修改docker默认存储位置【高版本的docker】

一、修改docker默认存储位置 1、停服务 systemctl stop docker 2、修改/etc/docker/daemon.json添加新的dcoker路径 如"data-root": "/mnt/hdd1/docker" 3、保存后重启服务:systemctl restart docker 二、其他服务的命令 systemctl disab…...

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具,它具备一系列强大的功能,可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点: 智能清理:CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…...

吴恩达机器学习全课程笔记第四篇

目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇,第三篇笔记请见: 吴恩达机器学习全课程笔记第…...

大数据分析师常用函数

常用函数 当进行大数据分析时,SQL中的函数非常丰富,以下是更详细的展开: 窗口函数 (Window Functions): ROW_NUMBER(): 为结果集中的每一行分配一个唯一的整数,用于排序。RANK(): 为结果集中的每一行分配一个排名,相同值会有相同的排名,但会跳过相同排名数量。DENSE_RAN…...

MySQL 主从读写分离入门——基本原理以及ProxySQL的简单使用

一、读写分离工作原理 读写分离的工作原理:在大型网站业务中,当单台数据库无法满足并发需求时,通过主从同步方式同步数据。设置一台主服务器负责增、删、改,多台从服务器负责查询,从服务器从主服务器同步数据以保持一…...

ROS2从入门到精通:理论与实战

ROS是什么? 随着人工智能技术的飞速发展与进步,机器人的智能化已经成为现代机器人发展的终极目标。机器人发展的速度在不断提升,应用范围也在不断拓展,例如自动驾驶、移动机器人、操作机器人、信息机器人等。机器人系统是很多复杂…...

docker 安装minio 一脚shell脚本

要创建一个用于安装Minio的Docker的Shell脚本,你可以按照以下步骤进行。这个脚本会执行以下操作: 拉取Minio的Docker镜像。创建一个Docker容器并映射端口。设置Minio的访问密钥和秘密密钥。持久化存储数据到本地目录。 以下是一个简单的Shell脚本示例&…...

【数据库】mybatis使用总结

文章目录 1. 批量插入、检索<foreach>2. <if> 判断等于情况3. 模糊查询(pgsql为例)4. 分页5. <resultMap > 中collection 和association 6. no conflict do update 1. 批量插入、检索<foreach> <insert id"insertSystemService" >in…...

VR元宇宙的概念|VR体验店加盟|虚拟现实设备销售

VR元宇宙是一个结合了虚拟现实&#xff08;Virtual Reality&#xff09;和增强现实&#xff08;Augmented Reality&#xff09;等技术的概念&#xff0c;代表着一个虚拟的多维度世界。它是一个由数字化的空间构成的虚拟环境&#xff0c;可以通过虚拟现实设备进行交互和探索。 元…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...