Benchmark学习笔记

news2024/11/18 11:48:59

小记一篇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.做出最终的建议

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

数据库优化

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

网络服务优化

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

应用程序优化

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

等等.........

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1485171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战:Oracle Weblogic 11g 安装部署(10.3.6.0)

导读 本文介绍在redhat linux 6.6上安装Oracle weblogic 11g(10.3.6.0)版本 环境:redhat6.6 jdk 1.7 1、下载webLogic10.3.6 http://www.oracle.com/technetwork/cn/middleware/weblogic/downloads/wls-main-091116-zhs.html2 、在linux的ro…

win11系统中nginx简单的代理配置

一.背景 为了公司安排的师带徒任务。 操作系统版本:win11家庭版 nginx版本:1.24.0 二.配置代理 之前文章已经说明了nginx简单的安装,要看阅读这个文章哈。web服务器nginx下载及在win11的安装-CSDN博客 1.配置需求识别 前端服务nginx(80…

Java进阶-IO(3)

话接上回,继续java IO的学习。上一次说完了字符流的读写数据,这次将基础部分剩余的一点内容看完。 一、流按功能分类 1、系统流 1.1 概述 系统流的类为 java.lang.System。Sytem 类封装了 Java 程序运行时的 3 个系统流。 System.in:标…

Vue3快速上手(十六)Vue3路由传参大全

Vue3路由传参 一、传参的多种方式 1.1 拼接方式 这种方式适合传递单个参数的情况&#xff0c;比如点击查看详情&#xff0c;传个id这样的场景 传参&#xff1a; <RouterLink to"/person?id1" active-class"active">person</RouterLink> …

类与对象(一)

目录 1 什么是面向过程和面向对象 1.1举例 2类的引入 3类的定义 3.1类的两种定义方式&#xff1a; 4.类的访问限定符及封装 4.1访问限定符 4.1.1为什么要有访问限定符 4.1.2有哪些访问限定符呢&#xff1f; 4.1.3简单举例理解 4.1.4C中的class与struct的区别(面试问题…

使用pyannote-audio实现声纹分割聚类

使用pyannote-audio实现声纹分割聚类 # GitHub地址 https://github.com/MasonYyp/audio1 简单介绍 pyannote.audio是用Python编写的用于声纹分割聚类的开源工具包。在PyTorch机器学习基础上&#xff0c;不仅可以借助性能优越的预训练模型和管道实现声纹分割聚类&#xff0c;还…

图解Vivado工程的目录结构

一、目录结构 ​在使用Vivado进行工程设计时&#xff0c;创建工程以及运行工程的过程中都会生成大量的目录和文件&#xff0c;下面图将对目录和文件结构及功能进行一个简单说明。 工程示例图 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 二、参考资料…

windows下安装cnpm

cnpm是淘宝团队开发的一个针对中国用户的npm镜像源&#xff0c;它是npm的一个定制版本。由于国外的npm源在国内访问速度较慢&#xff0c;所以cnpm镜像源可以提供更快的下载速度。cnpm的使用方式与npm基本相同&#xff0c;只需将npm替换为cnpm即可。 要想使用cnpm等先安装node.…

面试准备:排序算法大汇总 C++

排序算法总结 直接插入排序 取出未排序部分的第一个元素&#xff0c;与已排序的部分从后往前比较&#xff0c;找到合适的位置。将大于它的已排序的元素向后移动&#xff0c;将该元素插入到合适的位置。 //1. 直接插入排序 void InsertionSort(vector<int>& nums){f…

如何确保JDK版本与操作系统架构匹配?

1. 序言 最近的工作中&#xff0c;需要升级JDK版本到17.0.7&#xff0c;以解决一个JDK bug&#xff1a;JDK-8299626该bug的core dump关键字如下&#xff1a;SIGSEGV in PhaseIdealLoop::build_loop_late_post_work公司JDK团队提供的、包含JDK的基础镜像&#xff0c;有aarch64和…

深入了解Java虚拟机(JVM)

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心组件&#xff0c;它负责解释执行Java字节码&#xff0c;并在各种平台上执行。JVM的设计使得Java具有跨平台性&#xff0c;开发人员只需编写一次代码&#xff0c;就可以在任何支持Java的系统上运行。我们刚开始学习Ja…

Launch学习

参考博客&#xff1a; (1) 史上最全的launch的解析来啦&#xff0c;木有之一欧 1 ROS工作空间简介 2 元功能包 src目录下可以包含多个功能包&#xff0c;假设需要使用机器人导航模块&#xff0c;但是这个模块中包含着地图、定位、路径规划等不同的功能包&#xff0c;它们的逻…

【Python】1. 背景知识

认识 Python 计算机基础概念 什么是计算机? 很多老一辈的人, 管下面这个叫做计算机. 然鹅, 它只是 “计算器”, 和计算机是有很大区别的. 现在我们所说的计算机, 不光能进行算术运算, 还能进行逻辑判断, 数据存储, 网络通信等等功能,。 以至于可以自动的完成非常复杂的工作…

SLAM基础知识-卡尔曼滤波

前言&#xff1a; 在SLAM系统中&#xff0c;后端优化部分有两大流派。一派是基于马尔科夫性假设的滤波器方法&#xff0c;认为当前时刻的状态只与上一时刻的状态有关。另一派是非线性优化方法&#xff0c;认为当前时刻状态应该结合之前所有时刻的状态一起考虑。 卡尔曼滤波是…

java垃圾回收

垃圾回收 一个对象如果不再使用&#xff0c;需要手动释放&#xff0c;否则就会出现内存泄漏。我们称这种释放对象的过程为垃圾回收&#xff0c;而需要程序员编写代码进行回收的方式为手动回收。 内存泄漏指的是不再使用的对象在系统中未被回收&#xff0c;内存泄漏的积累可能…

LCR 124. 推理二叉树

解题思路&#xff1a; 分治 class Solution {// 一个哈希表用于存储中序遍历中每个值对应的索引&#xff0c;用于快速查找HashMap<Integer,Integer> map new HashMap<>();// 保存前序遍历的结果数组int[] preorder;// 主函数&#xff0c;传入前序和中序遍历的结果…

Vue中的计算属性和方法有什么区别?

Vue.js是一款流行的JavaScript前端框架&#xff0c;提供了丰富的功能和便捷的开发方式。在Vue中&#xff0c;计算属性和方法是常用的两种方式来处理数据和逻辑。但它们之间存在一些区别&#xff0c;本文将详细介绍Vue中计算属性和方法的区别&#xff0c;并通过示例代码加深理解…

UE4c++ ConvertActorsToStaticMesh ConvertProceduralMeshToStaticMesh

UE4c ConvertActorsToStaticMesh 创建Edior模块&#xff08;最好是放Editor模块毕竟是编辑器代码&#xff09;创建蓝图函数UBlueprintFunctionLibraryUTestFunctionLibrary.hUTestFunctionLibrary.cpp:.Build.cs 目标:为了大量生成模型&#xff0c;我们把虚幻带有的方法迁移成函…

一周学会Django5 Python Web开发-Django5详细视图DetailView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计28条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的停车位检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发停车位检测系统对于优化停车资源管理和提升用户体验至关重要。本篇博客详细介绍了如何利用深度学习构建一个停车位检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并结合了YOLOv7、YOLOv6、YOLOv5的性能对比&#xf…