互联网大厂必学技能:压力测试!
压测是衡量程序极限的重要指标
本文收录在猪哥GitHub:https://github.com/pig6/Java 中,本项目收集一线大厂面试、实战、Java学习路线等。
压测全称为压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患。
在开发接口或者功能点完成后,就需要对接口或功能点压力测试,测试出接口的极限以应对较大并发,举一个最直接的例子:淘宝双十一购物节,2018年淘宝交易创建峰值达到49.1万笔/秒,而在双十一之前淘宝都要对系统进行压测,看是否能够抗住每年创新高的并发!
大白话:不停地请求服务的接口,设置每秒的请求量以及持续时间,看看什么时候服务开始处理失败,从而得出服务的性能指标。
一、笔记目的
- 简单认识压测(的目的)
- 介绍压测平台应该有哪些能力
二、压测目的
- 挖掘系统瓶颈点
- cpu计算能力
- 业务代码(频繁full gc等)
- DB
- 线程模型
- 带宽等
- 建立性能基线
- qps (request per second)
- rt (response time)
- 用于线上扩容策略配置等
- 优化系统性能
- 配置DB主从
- jvm参数优化
- 缓存改造
- 线程模型改造等
三、压测平台应该具备的能力
1.压测场景
- rpc场景(一般为压测单个服务的性能)
- 回放录制的流量
- 自定义的流量
- http场景(一般为全链路压测)
- 回放录制的流量
- 自定义的流量
2.数据
准备数据用于压测的时候使用
- 录制任务
- http请求的录制
- rpc请求的录制
3.压测参数配置
- 压测类型
- 普通压测(普通循环播放流量)
- 调试(单次流量播放,一般用于调试链路是否接通)
- 递增(设置压测的多个阶段,每个阶段配置不同的qps以及持续时长)
- 配置
- 变量配置(单是流量录制是不够的,特殊的接口(比如关注行为)需要变化请求的参数,因此需要支持变量配置)
- 自增变量
- 设置起止值
- 设置步长
- 文件变量
- 读取变量列
- 时间变量
- 对当前毫秒戳做加减操作
- 计算变量
- uuid
- 区间random
- 预定义变量(就是写死一个值)
- 自增变量
- 请求配置
- 指定接口与方法/url
- 指定机器
- 超时时间
- 变量
- 指定配置好的变量
- 压测配置
- 初始qps
- 期望最大qps
- 词表配置
- 循环回放流量录制中的流量
- 资源隔离
- DB隔离
- 缓存隔离
- MQ隔离
- 静默期(那个时间段不可以进行压测)
- 变量配置(单是流量录制是不够的,特殊的接口(比如关注行为)需要变化请求的参数,因此需要支持变量配置)
4.保护策略
配置不同的监控项以及异常的处理策略:比如停止压测或者降低压测流量等
- db保护策略
- 配置db的告警阈值
- 告警之后自动降低指定的qps或者停止压测
- 配置db的告警阈值
- 机器保护策略
- 监控cpu gc 内存等等等等
- 降低qps或者停止
- 服务保护策略
- 监测请求的响应情况
- 降低qps或者停止
5.监控
配置不同的监控项用于判断性能瓶颈
- 客户端响应情况监控
- qps
- rt
- 错误率
- 服务端监控####
- 业务日志
- 机器
- cpu
- 线程池
- 服务接口等待队列大小等
四、压测报告
- 需要输出压测报告用于分析和记录
- 各个监控项的指标
- 压测结果的指标
- 等等
今天为大家简单列举了一些压测的知识点,以后有时间再为大家详细介绍哦,欢迎一键三连!!!