一 性能压测必须知道几件事
1 性能是系统或组件在给定约束中实现的指定功能的程度,诸如速度、正确性、内存使用
2 对系统性能的描述应该是多方面的,如:执行效率、稳定性、兼容行、可靠性、可扩展性容量等;其中,执行效率通过并发数、响应时间、吞吐量、成功率、资源消耗综合
3 并发与并行,平时说的并发是广义并发,不是服务100个用户,而是单位时间处理100任务请求
4 吞吐量=并发数/平均响应时间=请求总数/总时长,实际并发往往不是压测工具预设的并发;
二 UT压测
golang-sdk、java-sdk都提供了很好的工具
三 组件压测
1 压测工具
http: ab
grpc: ghz go get github.com/bojand/ghz
2 压测环境
对象=x核xG,外部依赖带宽,网卡...
3 设计压测cases
cases | 并发数 | Duration | Req | RPS | 平均耗时 | P99 | 吞吐 | 实际并发 | CPU(4u) |
---|---|---|---|---|---|---|---|---|---|
xxx | 100 | 60 | 581680 | 9694.59 | 10.03 | 38.06 | 9694.59 | 97.2375067 | 60% |
4 记录压测数据
5 分析压测结论
通过go-pprof,jstat等工具分析压测时,接口质量,优化代码
go tool pprof http://xxx
go tool pprof -http=:8080 pprof.xxx
go tool pprof -http=:8080 -base xxx.base xxx.current
5 输出压测报告
包括但不限于
执行效率通过并发数、响应时间、吞吐量、成功率、资源消耗
四 系统压测(前置准备,系统可观测性,监控打点)
1 压测链路确定,指定输入 输出
2 系统环境准备
链路上组件资源 依赖
3 设计压测用例
复杂度 压力大小(请求数、请求大小)
4 记录压测数据
5 分析压测结论
比如关注就是系统的qps、带宽
用例 | 组件1 | 组件2 | 组件3 | QPS | 入带宽 |
---|---|---|---|---|---|
xxx | 4C16G*2 | 4C8G*2 | 4C8G*2 | 2.5k/s | 160MB/s |
6 总结性能基线
7 根据性能基线估算成本
五 压测持续化
压测流程工具化,压测报告自动化,压测用例集成到CI
六 压测价值
1 性能优化的依据
2 组件、系统性能能力的量化参考,进一步得出性能基线,对外交付的sla依据
3 成本参考,性价比