怎样正确做web应用的压力测试?
web应用,通俗来讲就是一个网站,主要依托于浏览器实现其功能。
提到压力测试,我们想到的是服务端压力测试,其实这是片面的,完整的压力测试包含服务端压力测试和前端压力测试。
下文将从以下几部分内容展开:
- web应用压测范围
- 压测流程
- 补充1:前端压力测试
- 补充2:后端压力测试
- 学习资料分享
一、web应用压力测试范围
web应用的最开始是不分前后端的,后来随着网站功能越来越丰富,前后端不分离的架构显得低效和落后,这时候前后端分离的架构应用而生。
在前后端分离的架构模式下,前后端工程师约定好数据交互接口,实现并行开发。所以,一个web应用其实是包含前端和后端两个独立的部分。
另外,Google DoubleClick 研究表明:如果一个网页加载时长每增加 1 秒,用户就会流失 10%,加载时长超过 3 秒,用户就会离开。
因此,对于一个新的web应用来说,除了常见的服务端压力测试,前端的压力测试也是不可或缺的。
一个完整的web应用压力测试流程如下图所示
二、压测流程
1、确定压测范围和压测目标
压测范围:如果是全新的项目,原则上所有的功能和接口基本都要压测。如果是老项目新增的需求,则需要评估影响范围,确定老的功能和接口是否需要压测
压测目标:如果是全新的项目,要根据行业内的基本情况和经验定一个预估目标,如果是老项目,可以根据历史流量峰值作为参考目标。
2、制定压测方案
根据上一步的预期目标,制定压测方案。具体包含:压测环境,压测时间,相关负责人,测试工具或平台,验收标准
压测环境:为了还原真实的压力场景,一般选择预发环境或生产环境进行压测
压测时间:压测一般在功能测试或接口测试完成后介入。
压测工具或平台:前端压测可以使用PageSpeed等平台,后端压测一般会使用 jmeter、loadrunner等工具。(详细内容见补充1,补充2)
验收标准:一般来说要达到压测目标的预估值
3、压测准备
压测机:准备好压测机群,用于发送请求
服务器:由于压测流量会较高,所以需要提前准备服务器集群,用于承接流量或扩容使用
数据准备:准备用于压测的数据,一般来说要和真实数据做区分;准备压测脚本,一般来说,要添加标识,以便于和真实流量区分
4、实施压测
施压:在施压的过程中,从较小流量开始,逐步加压
观察:在逐步加压的过程,需要观察rt、error(报错率)、服务器的cpu、内存使用率等数据,如发现异常要及时停止压测,待排查和解决问题后再进行压测
5、压测观察&瓶颈分析
如何判断应用的承受能力?
在压测过程中观察报错率、响应时间等指标,如出现指标异常,则说明流量达到当前的瓶颈,需要停止压测分析并排查原因。
以下是几种常见异常的分析方法:
- 成功率未达标:查看错误日志,排查错误根本原因,进行性能调优
- 响应时间未达标:对照错误日志、链路追踪结果、服务器性能指标、数据库/中间件监控指标,找到响应时间过长的具体原因
- 吞吐量未达标:如果成功率和响应时间均达标,建议不断增加模拟用户数,重新压测,查看测试结果
什么时候需要增加服务器?
在上一步出现瓶颈调优之后,继续加压,观察各项指标
- 第一种情况:服务器cpu、内存等指标均未达瓶颈(通常以使用率达到70%-80%为瓶颈),qps、rt、报错率等指标出现异常,此时需要重复上一步,排查问题并优化
- 第二种情况:rt、报错率等指标未出现异常,服务器cpu、内存使用率即将达到瓶颈,且未达到预期的压测目标,此时无法通过调优来解决,需要增加服务器
6、验收
达到预期目标:达到预期目标,一般可以认为压测通过
未达到预期目标:如因各方面原因(资源、预算等)未达预期目标,需要产品经理和研发经理对压测结果确认
7、发送压测报告
如何写一份好的压测报告,可以参考这里 如何做一份精致的性能测试报告? - 知乎
8、项目上线
前面的步骤都完成之后,项目可以发布上线。
补充1:前端压测
google 开发者提出了一种 RAIL 模型来衡量应用的前端性能,即 response(响应)、animation(动画)、idle(空闲)与load(加载)。

RAIL 模型的广泛使用关键指标如下:
工具使用:PageSpeed
PageSpeed 是 google 一个开源的自动化工具,安装 PageSpeed 扩展程序运行即可
报告结果如图:

该工具功能丰富,报告也非常详细,并给出了优化建议,根据测试报告做对应的优化即可。
补充2:后端压测
后端即指服务端,后端压测就是服务端压测,也可以称为服务器压力测试。
在压测过程中,一般关注下面几个指标:qps(处理的请求量)、rt(响应时间)、error(报错率)、cup(cpu使用率)、mem(内存占用情况)、load(负载)、traffic(网络速率)。
通过观察qps、rt、error等关键指标,找到服务器的性能瓶颈,如果低于预期,则需要调优。
通过压力测试,提前发现服务器瓶颈,及时优化,避免网站一上线就奔溃。
工具:压测常用的工具有loadrunner和jmeter(文末有学习视频)
Jmeter 是一款使用Java开发的,开源免费的测试工具, 主要用来做性能测试,JMeter 可以用于对服务器、网络或对象模拟巨大的负载,有丰富的图形界面+脚本配置,方便易用。
LoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。
相关文章:
怎样正确做web应用的压力测试?
web应用,通俗来讲就是一个网站,主要依托于浏览器实现其功能。 提到压力测试,我们想到的是服务端压力测试,其实这是片面的,完整的压力测试包含服务端压力测试和前端压力测试。 下文将从以下几部分内容展开:…...
Hibernate的持久化类
Hibernate是一个开源的ORM(对象关系映射)框架,用于将Java程序中的对象映射到数据库中的关系型数据。在Hibernate中,持久化类是用来映射Java对象和关系型数据库表的类。 编写Hibernate持久化类需要遵循以下规则: 持久…...
【c语言】enum枚举类型的定义格式 | 基本用法
创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...
Python数据挖掘与机器学习
近年来,Python编程语言受到越来越多科研人员的喜爱,在多个编程语言排行榜中持续夺冠。同时,伴随着深度学习的快速发展,人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础,因此,掌握常用…...
Java有用的书籍2
. 1.《Effective Java》是由Joshua Bloch撰写的一本Java编程规范和最佳实践指南,第三版是最新版。它涵盖了Java编程中一些常见问题和技巧,以及如何编写更加优雅、健壮和高效的Java代码。 该书共分为15章,每一章都涵盖了Java编程中的一个关键…...
CTA进网测试《5G消息 终端测试方法》标准依据:YDT 3958-2021
GB 21288-2022 强制国标要求变化 与GB 21288-2007相比, 新国标主要有以下变化: 1. 增加职业暴露定义: 2. 增加吸收功率密度定义: 3. 增加不同频率、不同人体部位适用的暴露限值: 4. 增加产品说明书的注释:…...
[LeetCode复盘] LCCUP‘23春季赛 20230422
[LeetCode复盘] LCCUP23春季赛 20230422 一、总结二、 1. 补给马车1. 题目描述2. 思路分析3. 代码实现 三、2. 探险营地1. 题目描述2. 思路分析3. 代码实现 四、 3. 最强祝福力场1. 题目描述2. 思路分析3. 代码实现 五、 4. 传送卷轴1. 题目描述2. 思路分析3. 代码实现 六、 5…...
传统燃油车的智控App远控响应速度优化方向几点思考
一、分析当前问题及其影响因素 网络延迟:燃油车的App远控响应速度受到网络延迟的影响。网络延迟可能是由于网络拥堵或服务器响应速度慢等原因导致的。 用户设备:用户设备的性能也会影响燃油车的App远控响应速度。例如,设备的内存不足或存在故…...
回炉重造九---DNS服务器
1、DNS服务器的相关概念和技术 1.1 DNS服务器的类型 主DNS服务器从DNS服务器缓存DNS服务器(forward DNS服务器{转发器}) 1.1.1 主DNS服务器的作用 管理和维护所负责解析的域内解析库的服务器1.1.2 从DNS服务器的作用 从主服务器或从服务器“复制”解…...
UE4/5多人游戏详解(七、自定义委托,实现寻找会话和加入会话的函数,通过Steam进行两台电脑的联机)
目录 可能出现问题(在六部分的测试可能无法连接的问题【在末尾加上了,怕有人没看见在这里写一下】) 自定义委托 调整位置 创建更多的委托和回调函数给菜单: 多播和动态多播 代码: 委托变量 代码: 回…...
【数据库多表操作】sql语句基础及进阶
常用数据库: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它是长期存储在计算机内、有组织、有结构的数据集合。数据库是信息系统的核心部分,现代软件系统中大量采用了数据库管理系统(DBM…...
DPDK和RDMA的区别
网络的发展好像在各方面都是滞后于计算和存储,时延方面也不例外,网络传输时延高,逐渐成为了数据中心高性能的瓶颈。因为传统两个节点间传输数据的网络路径上有大量的内存拷贝,导致网络传输效率低下,网络数据包的收发处…...
体验 Google Bard
环境 windows 10 64bitGoogle Bardpython 3.8 简介 本篇介绍一个开源的 Google 聊天机器人Bard 的 API 逆向工程,使用它,可以免费的使用 Bard 服务,项目地址:https://github.com/acheong08/Bard 安装及使用 通过 pip 来安装 pip &…...
MITA触摸屏维修WP4053米塔工控机控制屏维修
MITA-TEKNIK米塔触摸屏维修工控机工控屏控制器维修DISPLAY 2COM全系列型号 Mita-Teknik触摸屏维修常见故障:上电无显示,运行报故障,无法与电脑通讯,触摸无反应,触控板破裂,触摸玻璃,上电黑屏&a…...
Nacos简介 安装 配置
简介 什么是注册中心 注册中心在微服务项目中扮演着非常重要的角色,是微服务架构中的纽带,类似于通讯录,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,…...
五、MyBatis各种查询功能
MyBatis的各种查询功能 如果查询出的数据只有一条,可以通过 实体类对象接收List集合接收Map集合接收 如果查询出的数据有多条,一定不能用实体对象接收,会抛TooManyResultsException,可以通过 实体类类型的List集合接收Map类型…...
uni-app——picker组件的用法、时间、日期、地区选择器等
1、uniapp–picker组件 <template><view class"signUp"><view class"signUp_dv1"><u-form :model"form" ref"uForm" label-width"95px"><u-form-item label"日期" :required"tr…...
什么情况需要考虑 mysql 分表
最近看到公司的其中一个数据库用户表每个月都要几百万的新用户数据增加,目前单表已经是两千多万了。所以找了 DBA 讨论,发现以前学的知识,以及网上的一些资料其实说的并不是很正确,比如 mysql 单表不建议超过一千万,我…...
系统架构师02-架构设计 20分
1.架构基本概念 *质量属性效用树:是对系统质量属性进行识别和优先级排序的重要工具 。 包括: 性能:效率指标,处理任务所需时间或单位时间内的处理量。 可用性: 可靠性: 容错:出现错误后人能保…...
【python视图3】networkx图操作示例
一、说明 根据定义,图是节点(顶点)以及已识别的节点对(称为边、链接等)的集合。在 NetworkX 中,节点可以是任何可哈希对象,例如文本字符串、图像、XML 对象、另一个图形、自定义节点对象等。 如…...
护网行动入门指南:零基础也能参与,快速积累网安实战经验
护网行动入门指南:如何参与并积累实战经验 护网行动是国内最高规格的网络安全实战演练,旨在检验企业、单位的网络安全防御能力,现已成为网络安全领域的“实战练兵场”。对计算机专业学生而言,参与护网行动不仅能积累宝贵的实战经…...
C语言完美演绎6-17
/* 范例:6-17 */#include <stdio.h>#include <conio.h>int main(){int a;printf("请输入你的分数(0-100)");scanf("%d",&a);if(a>0) if(a<100) printf("你输入的分数…...
如何用3步解锁百度网盘SVIP特权:macOS逆向工程的实践指南
如何用3步解锁百度网盘SVIP特权:macOS逆向工程的实践指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾在macOS上使用百度网盘下…...
用仓颉语言搞定编译原理实验:从正则表达式到DFA的保姆级实现(附完整代码)
用仓颉语言实现编译原理实验:从正则表达式到DFA的实战指南 第一次接触编译原理实验时,看着那些晦涩的算法描述和数学符号,我完全不知道如何下手。直到用仓颉语言完整实现了从正则表达式到NFA再到DFA的转换过程,才真正理解了这些概…...
逆向工程实现原理深度解析:Hook技术高效突破百度网盘macOS版系统限制
逆向工程实现原理深度解析:Hook技术高效突破百度网盘macOS版系统限制 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS BaiduNetdiskPlugin-m…...
别再被芯片手册吓到!用74HC595手把手教你读懂时序图(附示波器实测波形)
从零破解74HC595时序图:示波器实战与代码调优指南 第一次翻开74HC595的数据手册时,那些纵横交错的箭头、虚线、时间参数让我彻底懵了。作为电子爱好者,我们常被告知"要严格按照时序图操作",但没人告诉我们这些符号究竟对…...
TargetMol明星分子—— 2‘,3‘-cGAMP
2,3-cGAMP 是哺乳动物细胞中的内源性 cGAMP。cGAMP 分子属于环状二核苷酸(CDNs)家族,以三种不同的形式存在:3′3′-cGAMP、2′3′-cGAMP和 3′2′-cGAMP。由哺乳动物细胞中环鸟苷腺苷酸合成酶(cyclic guanosine monoph…...
炸锅!Claude Code 完整源码意外泄露,51 万行核心代码直接开源!
突发!Claude Code 意外开源 51 万行源码全网曝光 2026 年 3 月 31 日,AI 圈迎来重磅事件 ——Anthropic 旗下 Claude Code 因 npm 配置失误,通过 source map 文件意外泄露全部源码,超 1900 个文件、51.2 万行 TypeScript 代码公开…...
Flink on K8s实战:从源码到部署,手把手教你自定义Job提交流程
Flink on K8s深度定制:从源码改造到生产级部署的全链路实践 1. 为什么需要自定义Flink on K8s的提交流程? 在标准的Flink on Kubernetes部署中,官方提供的客户端工具已经能够满足基础需求。但当企业面临以下场景时,原生方案就会显…...
7个高级技巧深度掌握DS4Windows手柄映射引擎
7个高级技巧深度掌握DS4Windows手柄映射引擎 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows作为专业的游戏手柄映射解决方案,通过先进的XInput模拟技术将PlayStati…...
