服务端性能测试——性能测试体系

目录:

  1. 1.性能测试介绍
    1. 性能测试介绍
    2. 性能体系:
    3. 性能测试与分析优化:
  2. 行业流行性能压测工具介绍
  3. 行业流行性能监控工具介绍
  4. 行业流行性能剖析工具介绍
  5. 性能测试流程与方法
  6. 性能测试计划
    1. 计划:
    2. DAU,PV(perday),订单量(天)等等业务数据。
    3. 测试数据准备和构造
    4. 环境搭建
    5. 性能指标预期
    6. 发压时间线:
    7. 常⽤命令:
    8. 测试结果:
    9. 测试报告:
  7. 性能测试报告
  8. 性能测试场景设计
  9. 性能测试概念
  10. 经典技术架构解析

1.性能测试介绍

性能测试介绍
  • 有效的性能测试能给研发,运维团队提供有效的容量规划能力,系统风险识别,系统瓶颈识别,性能调优指导,保障尽量避免如上问题的发生

假设:以下场景,不可用10分钟,带来的经济损失

  • 天猫双十一峰值处理订单58.3万笔每秒,
  • 京东金融618战报:白条交易额10秒破亿京东支付峰值同比增长132%

降本增效大前提下:

  • 良好的容量规划能力+性能调优能力=为老板省钱 

性能测试能⼒是测开⼯程师精华加分项

性能体系: 

 性能测试与分析优化:

 

上述图中,三线,三区,两点,三状态

  1. 三条曲线:吞吐量的曲线(紫色),使用率/用户数曲线(绿色),响应时间曲线(深蓝色)
  2. 三个区域:轻负载区(Light Load),重负载区(Heavy Load),塌陷区(Buckle Zone)
  3. 两个点:最优并发用户数(The Optimum Number of Concurrent Users),最大并发用户数(The Maximum Number of Concurrent Users)
  4. 三个状态描述:资源饱和(Resource Saturated),吞吐下降(Throughput Falling),用户受影响(End Users Effected)

2.行业流行性能压测工具介绍

  • Apache AB = Apache HTTP server benchmarking tool ⼩快灵的⼯具
  • Apache JMeter
  • Grinder是⼀个⽤于在多台 机器上运⾏⽤jython(在 JVM上 运⾏的python)编写 的测试脚本的应⽤程序。它 的内部引 擎是基于 Grinder。nGrinder分别⽤ 控制器和agent将 Grinder 的控制台和agent包装起 来,并扩展了⽀持多个 并发 测试的特性。
  • Locust

 3.行业流行性能监控工具介绍

  • Linux自带命令 Vmstat,Top等
  • 机器监控工具 Nmon
  • 物理机监控Collectd + InfluxDB+ Grafana
  • Docker+ Mysql + Redis一体化监控:Prometheus + Grafana
  • (node_exporter,mysqld_exporter,redis_exporter,自定义exporter,全家桶)
  • 全链路Tracing监控,Zipkin

4. 行业流行性能剖析工具介绍

  • JConsole
  • JVirusalVM
  • JStack
  • FlameGraph
  • SkyWalking
  • Zipkin

5.性能测试流程与方法

性能测试⽅法

  • 并发模式(虚拟⽤户模式) 并发是指虚拟并发⽤户数,从业务⾓度,也可以理解 为同时在线的⽤户数。如果需要从客户端的⾓度出发,摸底业务系统各节点能同 时承载的在线⽤户数,可以使⽤该模式设置⽬标并发。 RPS 模式(吞吐量模式)
  • RPS(Requests Per Second)是指每秒请求数。RPS 模 式即“吞吐量模式”,通过设置每秒发出的请求数,从服务端的⾓度出发,直接衡 量系统的吞吐能⼒,免去并发到 RPS 的繁琐转化,⼀步到位。 

 6.性能测试计划

计划: 
  1. 需求分析与测试设计
  2. 环境设计与搭建
  3. 测试数据准备
  4. 性能指标预期设定
  5. 发压⼯具配置及脚本编写
  6. 测试执⾏ & 监控
DAU,PV(per day),订单量(天) 等等业务数据。
  • 案例 ⼀. 业务已经在线上运⾏, 或有相似业务在运⾏。 A ⾏为⽇志。⼆ 当前业务数据。=> 业务模型 => 预估接⼜ TPS/QPS ⼩问题:⽇志怎么取,取⼀整天算平均值么? 
  • 案例 ⼆. 新业务,或新活动,从未接触过,如何来做? A. 友商经验。 B. 产品,运营共同梳理评估 1.核⼼场景路径 2.⼊⼜及对应转化率 3. 问题收 敛页⾯ => 业务模型 =>对应测试场景,数据量级,接⼜⽐例。
测试数据准备和构造
  1. 接口请求参数:⾃⼰构造/⽇志获取/上下关联;
  2. 数据表的数据填充;
  3. 如果是多接口,则需结合业务场景设计请求⽐例 
环境搭建
  1. 设计:根据需求,结合线上机器部署情况,搭建线下测试环 境,要求具有⼀定的 参考价值,⼀般同⽐1/2,1/4
  2. 环境搭建: (1)起压环境:压测⼯具的安装与调试、 机器参数记录; (2)被压环境:基础服务的搭建、web机代码部署及代码改 造、机器 参数记录
  3. 环境调试:查看接⼝是否正常 
性能指标预期
  1. 每秒请求数(QPS)
  2. 请求响应时间(最⼩、最⼤、平均)
  3. 错误率
  4. 机器性能:cpu idle 45%、memory⽆剧烈抖动或者飙升
  5. 压测过程接⼜功能是否正常 不同性能测试⽅式下指标预期会有差异 
发压时间线:
  1. 测试前环境检查:记录机器参数
  2. 起压:根据被压情况,调节并发量到适合的情况
  3. 查看记录各项性能指标 (1)nginx⽇志查看每秒请求数 (2)查看nginx错误请 求 (3)查看机器参数:cpu idle、mem等 (4)查看db、cache等数据是否写⼊正常 (5)访问接⼜,查看功能是否正常 
常⽤命令:
  1. 查看nginx每秒请求数:tail -f access.log | awk '{print $4}' | uniq -c 2.
  2. 查看某个接⼜每秒请求数:tail -f access.log | grep p_getorderstatus |awk '{print $4}' | uniq -c
  3. 查看cpu idle:vmstat 1
  4. 查看内存:free -m
  5. 查看nginx⽇志是否有错误请求:tail -f access.log |cut -d ' ' -f 10 |grep -v 200
  6. 查看进程:top、ps aux|grep xxx
  7. 查看nginx⽇志某接⼜访问数量:cat access.log.xxxx|grep p_getorderstatus |wc -l
  8. 杀进程: 指定进程号:kill xxx; 指定部分进程名:pkill xxx; ⾃定义特征:for i in `ps aux |grep xxxx|awk '{print $2}'`;do kill $i ;done 或者kill `pgrep -f xxxx`
  9. 查看TIME_WAIT数量:ss -s 或者 netstat -tnlp |grep TIME_WAIT|wc - 
测试结果:
  1. 测试前环境检查:记录机器参数
  2. 起压:根据被压情况,调节并发量到适合的情况
  3. 查看记录各项性能指标 (1)nginx⽇志查看每秒请求数 (2)查看nginx错误请 求 (3)查看机器参数:cpu idle、mem等 (4)查看db、cache等数据是否写⼊正常 (5)访问接⼜,查看功能是否正常 
测试报告:
  1. 根据测试过程中记录的各项参数,结合压测⼯具产 ⽣的⽇志,对测试结果进⾏分析,并产出测试报告
  2. 测试完成后,及时与相关⼈员沟通,确认是否满⾜需求
  3. 发送测试报告邮件 

7.性能测试报告 

~

8.性能测试场景设计

  1. 负载测试(Load Test):负载测试是⼀种性能测试,指数据在 超负荷环境中运 ⾏,程序是否能够承担。 关注点:how much
  2. 压⼒测试(Stress Test): 压⼒测试(又叫强度测试)也是⼀ 种性能测试,它在系统 资源特别低的情况下软件系统运⾏情况,⽬ 的是找到系统在哪⾥失效以及如何失 效的地⽅。
  3. 极限测试 Extreme testing:在过量⽤户下的负载测试 Hammer testing:连续执⾏所有能做的操作
  4. 容量测试(Volume Test):确定系统可处理同时在线的最⼤⽤户数 关注点:how much(⽽不是how fast) 容量测试,通常和数据库 有关,容量和负载的区别在于:容量关注的是⼤容量,⽽不需要关注使⽤中的实际 表现。

 

9.性能测试概念 

并发:并发是指虚拟并发⽤户数,从业务⾓度,也可以理解为同时在线的⽤户数。并⾏ 技术上提升压⼒的⽅式:

  1. 多进程:启动多个进程,每个进程虽然只有⼀个线程,但是多个进程可以⼀起执⾏多个任务
  2. 多线程:启动⼀个进程,在⼀个进程的内部启动多个线程,这样多个线程也可以⼀起执⾏多个任务
  3. 多进程+多线程:启动多个进程,每个进程再启动多个线程
维度多进程多线程优劣
数据共享,同步数据是分开的:共享复杂,需要用IPC;同步简单多线程共享进程数据︰共享简单;同步复杂各有优势
内存,CPU占用内存多,切换复杂,CPU利用率低占用内存少,切换简单,CPU利用率高线程占优
创建销毁,切换创建销毁、切换复杂,速度慢创建销毁、切换简单,速度快线程占优
编程调试编程简单,调试简单编程复杂,调试复杂进程占优
可靠性进程间不会相互影响一个线程挂掉将导致整个进程挂掉进程占优
分布式适应于多核、多机分布﹔如果一台机器不够,扩展到多台机器比较简单适应于多核分布进程占优

 

 

 

 

 

 

 

 

 

 

 

TPS(Transaction per Second):系统每秒处理交易数, 单位是笔/秒。 QPS(Query per Second):系统每秒处理查询次数,单 位是次/秒。对于互联⽹业务中,如果某些业务有且仅有 ⼀个请求连接,那么TPS=QPS, ⼀般情况下⽤TPS来衡量整个业务流程,⽤QPS来衡量接⼜ 查询次数。 并发数 = QPS * 平均响应时间

指标分位 Mean P90 P95 P99

 10.经典技术架构解析

~

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

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

相关文章

HTTP 3xx状态码:重定向的场景与区别

HTTP 状态码是服务器响应请求时传递给客户端的重要信息。3xx 系列的状态码主要与重定向有关,用于指示请求的资源已被移动到不同的位置,需要采取不同的操作来访问。 一、301 Moved Permanently 定义: 服务器表明请求的资源已永久移动到一个新…

Fluids —— Volume VOP

P,当前体素位置;density,此场的值;ix, iy, iz,体素索引(0 ~ res-1);resx, resy, resz,当前volume的精度;center,当前volume的中心点;o…

STM32入门教程-2023版【3-3】gpio输入

关注 星标公众号 不错过精彩内容 大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 上两小节我们已经把GPIO的结构和8种输入输出模式都讲完了,到这里还不懂的可以回…

记录汇川:ITP与Autoshop进行仿真连接

1、定义如下程序: 2、ITP新建工程: 3、依次选择,最后修改IP 4、定义两个变量 5、拖一个按钮和一个圈出来,地址绑定:M1 6、地址绑定:Y1 7、PLC启动仿真 8、ITP启动在线模拟器 9、即可实现模拟仿真

力扣——C语言:合并两个有序数组

88. 合并两个有序数组 - 力扣(LeetCode) 这道题有多种方法可以解决 一、暴力求解 这种方法最简单,我们只需要把两个数组合在一起然后在冒泡排序就可以了 代码如下: void merge(int* nums1, int nums1Size, int m, int* nums2…

Redis 过期删除策略

常见的三种过期删除策略: 定期删除;惰性删除;定时删除; 定期删除策略 每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。 定期删除的实现在 expire.c 文件下的 activeExpireCycle …

c++在结构(Struct)中使用栈(Stack)

栈实现 1.入栈 2.出栈 3.空栈 4.满栈 5.栈顶 完整栈实现源码: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_

【驱动序列】C#获取电脑硬件之CPU信息,以及它都有那些品牌

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是是《驱动序列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识…

DAY2-English Learning

一、积累 1.trunk 案例: i put my luggage in the trunk of the car. 翻译:我把行李放在汽车的后备箱里。 2. solvent 例句:The sovlent is uesd to dissolve the paint. 翻译:溶剂是用来溶解油漆的。 3. 受伤的表达 1.cramp …

人工智能_机器学习091_使用三维瑞士卷数据_KMeans聚类算法进行瑞士卷数据聚类---人工智能工作笔记0131

然后我们首先来构建一下数据 准备瑞士卷数据: import numpy as np 导入数学计算包 import matplotlib.pyplot as plt 导入画图包 #自底向上聚类 from sklearn.cluster import AgglceerativeClustering 导入分层聚类模型 from sklearn.datasets import make_swiss_roll # 瑞士卷…

谷粒商城项目|微服务架构的一些与思考解决跨域问题

1.微服务架构的组成每部分的作用 2.还有其他的微服务架构模式吗 3.微服务服务交互的方式 1)grpc 2)rest api 4.微服务网关与API网关? 5.注册中心比较(Nacos与Eureka) Nacos Nacos 是阿里巴巴开源的项目,N…

【Python学习】Python学习9-字符串

目录 【Python学习】Python学习9-字符串 前言创建语法访问字符串的值字符串拼接Python 转义字符Python字符串运算符Python格式化字符串Python 三引号Unicode字符串Python 的字符串内建函数参考 文章所属专区 Python学习 前言 本章节主要说明Python的字符串类型。 创建语法 …

SQL基础知识2

select语句 1、where语句 具体的在 SQL基础知识1 2、集函数 餐厅订单案例 where后面用集函数会导致无效/错误,原因在3.1 3、group by、having 继上面的餐厅案例 案例:用两个条件分组 1、having和where的区别 2、总值计算 (汇总&#x…

Mysql高可用|索引|事务 | 调优

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 chatgpt体验地址 文章目录 前言sql语句的执行顺序关键词连接名字解释sql语句 面试坑点存储引擎MYSQL存储引擎 SQL优化索引索引失效索引的数据结构面试坑点 锁事务四大特性事务的隔离级别M…

创建一个矩形中有两个三角形

#include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream>float vertices[] {// 第一个三角形0.5f, 0.5f, 0.0f, // 右上0.5f, -0.5f, 0.0f, // 右下-0.5f, -0.5f, 0.0f, // 左下-0.5f, 0.5f, 0.0f, // 左上 };unsigned i…

P1025 [NOIP2001 提高组] 数的划分———C++(动态规划、DFS)

目录 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 动态规划的解题思路Code运行结果DFSCode运行结果 [NOIP2001 提高组] 数的划分 题目描述 将整数 n n n 分成 k k k 份&#xff0c;且每份不能为空&#xff0c;任意两个方案不相…

FCRP第一题详解一

先看效果&#xff1a; 20240106-094943 看他的第一要求&#xff1a; 1.整个模板只能出现一个数据集&#xff0c;下拉复选框与报表主体共用一个数据集&#xff0c;且不影响互相显示。 所以这里不能通过SQL语句来过滤&#xff0c;SQL语句中中只能全部查询出来&#xff0c;这样保…

Linux———head,tail命令详解(狠狠爱住)

目录 head 命令&#xff1a; head 命令基本语法&#xff1a; 常用选项 示例 显示文件的前 10 行&#xff1a; 显示文件的前 5 行&#xff1a; 显示文件的前 100 个字节&#xff1a; 不显示文件名的标题信息&#xff1a; 显示文件名的标题信息&#xff1a; tail 命令&…

基于JAVA+SpringBoot的咖啡商城

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着互联网的普及和发…

Transformer从菜鸟到新手(五)

引言 上篇文章我们在单卡上完成了完整的训练过程。 从本文开始介绍模型训练/推理上的一些优化技巧&#xff0c;本文主要介绍多卡并行训练。 下篇文章将介绍大模型推理常用的缓存技术。 多卡训练 第一个要介绍的是利用多GPU优化&#xff0c;因为在单卡上训练实在是太慢。这…