负载测试
定义
负载测试是在逐步增加并发量和请求量的情况下,验证系统在接近设计容量范围内的性能表现,确定系统能承受多大的稳定负载而不出现性能下降。
负载测试(Load Test)是一种性能测试,用来评估系统在正常和接近高负载情况下是否仍能保持:正确性、稳定性、性能指标达标(响应时间、QPS、吞吐量等),它模拟大量用户同时访问系统,通过持续施压来观察系统极限。
目标
- 验证系统承载能力是否达到设计值(如承诺 10k QPS 是否能达到)
- 找出性能瓶颈(数据库、缓存、CPU、锁竞争等)
- 确保系统在高负载下仍能稳定运行
- 为扩容、容量规划提供依据
- 发现隐藏问题(慢查询、内存泄漏、线程池耗尽)
常见负载测试指标
| 指标 | 含义 |
|---|---|
| QPS | 每秒请求数 |
| TPS | 每秒事务数 |
| 响应时间(P50,P90,P95,P99) | 延迟表现 |
| 吞吐量 | 系统每秒处理的数据量 |
| CPU、内存、I/O、网络使用率 | 监控资源瓶颈 |
| 错误率 | 请求失败占比 |
| 饱和度(Saturation) | 系统举例极限有多近 |
通用流程
- 明确性能目标:例如:QPS ≥ 5000、P99 响应时间 ≤ 50ms、错误率 ≤ 0.1%
- 构造测试场景:登录、查询、下单、推送;使用真实数据(Mock 可能失真)
- 典型的负载模型:固定并发(steady load)、阶梯式增加(step load)、峰值负载(burst load)
- 使用压测工具模拟请求:常见工具:JMeter、k6(推荐)、Locust、wrk、ab、Gatling
- 实时监控系统资源:Prometheus + Grafana或云产品自带监控
- 分析结果、定位瓶颈:判断是否达到目标;查找慢查询、线程池、GC、数据库锁、Redis 命令等
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 JasmineRain's blog!
评论
