一、压测基础认知:什么是压力测试、为什么需要压测、压测的核心目标
各位同学好,我是老K。今天咱们聊聊压测最基础的东西。
很多人一听到「压力测试」,就觉得是拿工具怼着系统猛打,看它什么时候挂。嗯,这个理解不能说错,但太片面了。我做了这么多年性能测试,见过太多团队把压测当成「找极限」的游戏,结果上线后该崩还是崩。
说白了,压力测试不是为了让系统崩溃,而是为了在它崩溃之前,搞清楚它到底能扛多少。
1.1 什么是压力测试
压力测试,英文叫 Stress Testing。它的核心逻辑很简单:模拟真实用户行为,给系统施加越来越大的负载,观察它的表现。
我习惯把它分成两类:
- 负载测试:在预期流量范围内,看系统稳不稳
- 压力测试:超出预期流量,看系统什么时候开始出问题
举个例子。你开发了一个电商网站,预估双十一峰值是每秒1万请求。负载测试就是测1万请求时系统表现如何;压力测试则是测到1.2万、1.5万、2万,看它什么时候响应变慢、什么时候报错、什么时候彻底挂掉。
核心要点:压测不是一次性行为,而是一个持续发现瓶颈、验证优化效果的过程。
1.2 为什么需要压测
这个问题我问过很多刚入行的同学。最常见的回答是:「怕上线后崩了。」
对,但不全对。
我个人觉得,压测的价值体现在三个层面:
- 验证容量规划:你买的服务器够不够?数据库连接池配多大?这些不是拍脑袋决定的,得靠数据说话。
- 发现性能瓶颈:代码写得再漂亮,一上压测可能就原形毕露。我记得有一次帮一个金融项目做压测,发现TPS死活上不去,最后定位到是日志框架的同步写盘拖了后腿。
- 保障用户体验:用户不会管你系统内部多复杂,他们只关心页面打开快不快、操作流不流畅。
避坑指南:我曾经见过一个团队,上线前只做了功能测试,觉得压测「没必要」。结果上线第一天,用户量一上来,数据库连接池直接打满,整个服务瘫痪了4个小时。嗯,从那以后他们每次发版前必做压测。
1.3 压测的核心目标
压测到底看什么?三个指标:吞吐量、响应时间、错误率。这三者缺一不可。
1.3.1 吞吐量
吞吐量,说白了就是系统单位时间内能处理多少请求。常见的单位有:
- TPS(Transactions Per Second):每秒事务数
- QPS(Queries Per Second):每秒查询数
- RPS(Requests Per Second):每秒请求数
你想想看,一个系统TPS是100,另一个是1000,哪个更扛打?一目了然。
但这里有个坑:吞吐量不是越高越好。我见过有人为了追求高TPS,把业务逻辑全砍了,只留一个空接口。这种压测数据有什么意义?
我的习惯:压测时一定要带上真实业务逻辑,哪怕慢一点,数据才有参考价值。
1.3.2 响应时间
响应时间,就是用户发一个请求到收到回复,花了多长时间。通常关注这几个分位值:
| 分位值 | 含义 | 典型阈值 |
|---|---|---|
| P50 | 50%的请求在这个时间内完成 | < 200ms |
| P90 | 90%的请求在这个时间内完成 | < 500ms |
| P99 | 99%的请求在这个时间内完成 | < 1000ms |
为什么看分位值而不是平均值?因为平均值会被极端值拉偏。举个例子,99个请求都是10ms,1个请求是10秒,平均值是100ms左右,看起来还行。但那个等了10秒的用户,早就骂娘了。
1.3.3 错误率
错误率,就是所有请求中失败的比例。理想情况下应该是0%。但实际项目中,我们通常允许一个极低的错误率,比如0.1%以内。
常见的错误类型:
- 超时:请求等了太久,客户端主动放弃了
- 连接拒绝:服务器忙不过来,直接不接客了
- 业务异常:比如库存不足、参数校验失败等
注意:错误率突然飙升,往往是系统即将崩溃的前兆。我曾经在一次压测中看到错误率从0%跳到5%,紧接着3秒后TPS直接腰斩。这时候就该停掉压测,赶紧排查了。
1.4 三个指标的关系
吞吐量、响应时间、错误率,这三者不是独立的。它们之间有一个经典的三角关系:
- 负载增加 → 响应时间上升 → 吞吐量先升后降
- 响应时间超过阈值 → 错误率开始出现
- 错误率升高 → 有效吞吐量下降
我习惯用一张图来理解这个关系:
从这张图可以看得很清楚:
- 在健康区,三个指标都表现良好
- 到了拐点,响应时间开始明显上升,吞吐量增速放缓
- 进入临界区,错误率开始冒头,系统进入不稳定状态
- 到了危险区,错误率飙升,吞吐量反而下降,系统濒临崩溃
我的建议:压测时重点关注拐点位置。这个点就是系统的「安全红线」,日常运维中不要超过这个负载。
1.5 小结
这一章我们聊了压测最核心的三个概念:
- 什么是压测:模拟真实负载,观察系统表现
- 为什么需要压测:验证容量、发现瓶颈、保障体验
- 三个核心指标:吞吐量、响应时间、错误率,以及它们之间的三角关系
嗯,基础打牢了,后面才能走得更远。下一章我们聊聊压测工具的选择,到时候我会分享一些实际项目中的踩坑经验。