易君召
发布于 2026-09-11 / 作者:易君召 / 0 阅读
0

上线前性能测试完整步骤

核心目标:验证系统在预期流量、并发、数据量下,响应时间、吞吐量、稳定性、资源占用满足业务指标;提前发现瓶颈、内存泄漏、死锁、数据库慢 SQL 等问题,避免上线雪崩。

1. 测试准备阶段

1.1 明确性能需求 & 制定指标(性能基线 SLA)

和产品、开发、运维对齐业务场景,定义指标,区分业务指标资源指标

  • 业务:并发用户数、TPS/QPS、95/99 响应时间、成功率、事务响应时间

  • 资源:CPU、内存、磁盘 IO、网络、连接数、GC 指标

  • 场景:日常峰值、大促峰值、梯度压测、长时间稳定性压测

示例:接口 95 响应 < 200ms,TPS≥1000,成功率 100%,CPU≤70%

同时识别核心链路:登录、下单、查询、支付等关键业务接口,区分冷热数据。

1.2 环境准备

性能压测环境尽量生产等配置(硬件、中间件版本、数据库数据量),禁止直接压生产。

  • 隔离压测环境,避免影响其他测试;

  • 数据库准备生产量级的基础数据(千万级表不能拿几百条数据压,结果失真);

  • 部署监控套件:服务器监控、数据库监控、JVM / 进程监控、链路追踪(SkyWalking/Pinpoint);

  • 压测工具准备:JMeter、Locust、Gatling、k6;压测机单独部署,避免压测机本身成为瓶颈。

1.3 脚本 & 数据准备

  1. 录制 / 编写压测脚本,参数化:账号、查询 ID、请求体,避免重复请求缓存导致压测结果虚高

  2. 构造压测数据:

    • 业务参数做数据池,避免重复 ID;

    • 准备预热脚本,压测前预热缓存、连接池;

  3. 脚本评审:检查是否有思考时间、是否漏前置依赖(如登录 token),是否有脏数据清理逻辑。

1.4 制定压测方案

明确压测类型、压测顺序、停机 / 回滚预案、脏数据清理方案:

  • 基准测试

  • 梯度并发压测(负载测试)

  • 稳定性测试(耐久压测)

  • 极限压力测试(容量测试)

  • 异常场景压测(熔断、限流、降级)

2. 执行压测阶段(按顺序执行)

2.1 基准测试(单用户轻量)

少量并发(1~5 用户)跑核心接口,得到基准响应时间。 目的:验证脚本可用、链路通、监控正常;识别基础慢 SQL、接口逻辑问题。

2.2 负载测试(梯度加压,最常用)

逐步增加并发,阶梯加压:比如 50→100→200→500 用户,每级稳定运行一段时间。 重点观察:

  • TPS 上升趋势,什么时候 TPS 不再上涨(拐点)

  • 响应时间随并发的变化

  • 服务器资源、数据库连接池、锁等待

找到拐点:继续增加并发,TPS 不升、响应时间陡增,这就是系统当前容量上限。

2.3 稳定性 / 耐久测试

日常峰值并发下长时间跑(通常几小时~24h)。 重点查:内存泄漏、连接不释放、GC 长时间 STW、数据库事务堆积、磁盘空间持续上涨。很多问题短压测发现不了。

2.4 压力 / 容量极限测试

超过预期峰值,持续加压,找到系统崩溃点。 目的:了解系统极限,验证限流熔断是否生效;当流量突增时,系统是优雅降级还是直接宕机。

2.5 异常场景压测(容错测试)

模拟线上故障:

  • 数据库慢查询、连接打满

  • 下游接口超时、抖动

  • 网络延迟、丢包 验证:熔断、降级、限流、重试策略是否生效,防止雪崩。

压测全程:同步记录监控指标 + 日志,压测不看监控等于白测。

3. 瓶颈定位与调优阶段(性能测试最核心环节)

压测出现指标不达标,按链路逐层排查:

  1. 应用层:接口代码、循环查询、对象创建过多、GC、线程池配置不合理

  2. 中间件:Redis 慢命令、MQ 堆积、连接池过小

  3. 数据库:慢 SQL、缺少索引、锁竞争、事务过长、分库分表瓶颈

  4. 基础设施:CPU 瓶颈、磁盘 IO、带宽、容器资源限制

调优原则:改一处,重新跑基准验证,不要一次性大量修改。每次调优后复测,对比前后指标,确认优化有效。

4. 回归验证 & 报告输出

  1. 调优完成后,完整重跑全套压测用例,确认所有 SLA 指标达标;

  2. 输出性能测试报告:

    • 测试环境、版本、压测场景

    • 基准 / 负载 / 稳定性压测图表(TPS、响应时间、资源曲线)

    • 发现的瓶颈、优化措施、优化前后对比

    • 遗留风险、容量评估、上线建议

  3. 组织评审:开发、运维、产品共同确认,评估风险是否可接受。

5. 上线前最后准备(性能测试收尾)

  1. 确认压测环境和生产差异,评估环境差异带来的风险;

  2. 配置线上限流、熔断告警;

  3. 准备线上小流量灰度验证方案(上线后灰度放量,持续观测线上真实性能指标);

  4. 制定扩容预案、回滚方案。

常见踩坑点

  1. 压测环境数据量远小于生产,压测结果虚高;

  2. 脚本没有参数化,大量重复请求命中缓存,指标失真;

  3. 只做短时间压测,不做耐久测试,上线后内存泄漏慢慢拖垮系统;

  4. 只关注 TPS,忽略 99 响应时间;

  5. 压测时不开启全链路监控,出问题无法定位瓶颈。