压力测试的三种核心类型

做压力测试这几年,我经常被问到同一个问题:“压力测试到底测什么?”

其实说白了,压力测试不是单一的动作。它分三个维度:负载测试、容量测试和稳定性测试。这三者看着像亲兄弟,但各有各的脾气。

我习惯用一个比喻来理解它们:
负载测试是“看看能扛多少活”,容量测试是“找到极限值在哪儿”,稳定性测试是“长时间干会不会出事”。

下面咱们逐个拆解。

负载测试

负载测试,我的理解是:在预期流量下,验证系统能不能正常干活。说白了就是给系统一个“正常范围”的压力,看它响应快不快、报不报错。

我在项目中遇到过这样一个场景:上线前产品经理说“日活预计10万”,那我们就得模拟10万用户同时在线的情况。这就是典型的负载测试。

核心关注点

  • 响应时间:接口平均响应是否在SLA范围内
  • 吞吐量:每秒能处理多少请求
  • 错误率:有没有出现5xx或超时
  • 资源消耗:CPU、内存、带宽是否合理

一个简单的负载测试场景

假设我们要测一个登录接口。目标是:1000个用户同时登录,平均响应时间小于500ms,错误率低于1%。

我一般会用这样的配置做基准测试:

# JMeter 线程组配置示例
线程数: 1000
Ramp-Up 时间: 10秒
循环次数: 10
持续时间: 300秒

嗯,这里要注意:Ramp-Up时间太短,容易把系统直接冲垮,测不出真实水平。我建议至少让压力慢慢爬升,观察系统是怎么“接招”的。

个人习惯:负载测试我至少跑3轮,取平均值。单次测试的结果偶然性太大,尤其是网络有抖动的时候。

容量测试

容量测试,说白了就是找到系统的极限在哪。它回答一个问题:“系统最多能扛多少人而不崩溃?”

这和负载测试不一样。负载测试是在“预期范围内”测,容量测试是往死里压,直到系统撑不住为止。

我曾经在一个电商项目中做容量测试。系统设计说是能支持5000并发,结果我们压到3800的时候,数据库连接池就爆了。你想想看,这要是没提前测出来,双十一那天就等着闪崩吧。

容量测试怎么搞?

  1. 阶梯加压:一开始给500并发,稳定后加1000,再加到1500……直到出现拐点
  2. 找到拐点:响应时间突然飙升、错误率急剧上升、CPU打满——这些就是拐点信号
  3. 记录极限值:把最大并发数、最大吞吐量、资源上限记下来

常见的容量瓶颈

瓶颈类型 表现 常见原因
数据库 连接超时、慢查询激增 连接池过小、索引缺失
应用服务器 CPU 100%、内存溢出 线程池配置不当、代码死循环
网络 带宽占满、丢包 未做CDN、链路带宽不足
缓存 缓存穿透、击穿 热点数据未预热、缓存策略错误
我曾经踩过一个坑:做容量测试时只盯着并发数,忘了检查自动扩容机制。结果压测工具把节点都打满了,扩容策略却没触发——因为门槛设得太高。所以容量测试一定要带上弹性伸缩一起测。

稳定性测试

稳定性测试,我想用一个词来形容:“熬”。它不是测爆发力,而是测耐力。系统能不能在高负载下连续跑12小时、24小时甚至更久?会不会出现内存泄漏?会不会越跑越慢?

我见过不少系统,刚上线跑得飞快,跑了三天就开始卡顿。一查,原来是某个缓存没清理,内存一点点被吃掉。这就是稳定性的问题。

稳定性测试的关键指标

  • 长期资源趋势:CPU、内存、磁盘IO是否随时间增长
  • GC行为:Full GC频率是否越来越快
  • 慢请求比例:响应时间是否逐渐变长
  • 内存泄漏检测:堆内存使用量是否持续上升

怎么判断稳定性测试通过?

我个人标准:连续运行24小时,各项指标波动不超过10%。

如果响应时间从200ms慢慢涨到800ms,就算没报错,这也是不稳定的表现——说明系统在“慢性死亡”。

一个小技巧:稳定性测试时,我习惯每隔1小时打一次堆转储。如果最后能对比出某个对象数量一直在涨,那十有八九就是内存泄漏的元凶。

三种类型的关系

你可能会问:这三种测试到底先做哪个?我的建议是先负载、再容量、最后稳定性。

  • 先做负载测试,确认系统在正常范围内没问题
  • 再做容量测试,摸清系统的真实上限
  • 最后做稳定性测试,保证系统能长时间撑住

但实际项目中,这三个往往是迭代进行的。找到容量瓶颈,修完代码后,再跑一遍负载测试,确认没引入新问题。嗯,这才是实战中的节奏。

压力测试三种类型关系图 压力测试的三种核心类型 压力测试 负载测试 预期流量下的表现验证 容量测试 寻找系统极限拐点 稳定性测试 长时间高负载下的耐力 关注点 · 响应时间 / 吞吐量 · 错误率 / 资源消耗 · 多轮取平均值 方法论 · 阶梯加压找拐点 · 记录最大并发数 · 含弹性伸缩验证 验证手段 · 24H 连续运行 · 监控资源趋势/Gc · 堆转储找泄漏 推荐执行顺序:负载 → 容量 → 稳定性 注:实际项目中三者迭代进行,发现瓶颈后修复再验证

三种类型对比一览

最后,我习惯用一张对比表来快速回顾它们的不同。这个表在我的团队里贴了好几年,每次新人来都先看这个。

维度 负载测试 容量测试 稳定性测试
目标 验证预期流量下的表现 找到系统极限值 验证长期运行的可靠性
压力方式 恒定压力或阶梯递增 阶梯加压直到崩溃 恒定高压力长期运行
持续时间 几分钟到几小时 几十分钟 12小时到几天
主要指标 响应时间、吞吐量 最大并发、资源拐点 内存趋势、GC频率
典型发现 性能不达标、配置错误 连接池不够、代码瓶颈 内存泄漏、资源泄露

其实这三种类型没有的界限。我遇到很多团队,把负载测试做成了“轻量级的容量测试”,把稳定性测试做成了“长时间的负载测试”。这都不算错,关键是你要清楚自己到底在测什么。

一句话总结:负载测试保底线,容量测试探上限,稳定性测试测耐力。三个合起来,才是完整的压力测试。