一、压力测试的目标
- 评估系统最大承载能力(QPS、并发数、吞吐量)
- 发现性能瓶颈(CPU、内存、数据库、网络等)
- 验证高并发下的稳定性(错误率、超时、崩溃)
- 辅助容量规划和扩容决策
- 验证优化效果
二、常用压力测试工具
- ab(ApacheBench):简单易用,适合单接口压测
- wrk:高性能,支持多线程/多连接,支持Lua脚本
- JMeter:功能强大,支持复杂场景、分布式压测、可视化报告
- Locust:基于Python,支持分布式、场景编排
- siege:命令行工具,支持多URL压测
- Boom、k6、Gatling等
三、常用指标
- QPS(Queries Per Second)/RPS(Requests Per Second):每秒请求数
- 并发数:同时活跃的请求数
- 响应时间(RT):平均/最大/最小响应时长
- 错误率:请求失败比例
- 吞吐量:单位时间内处理的数据量
- 资源利用率:CPU、内存、带宽、磁盘I/O
四、实际操作步骤
1. 确定测试目标和场景
- 压测哪个接口/页面?(如首页、下单、API等)
- 目标QPS/并发是多少?
- 是否需要模拟登录、带参数、复杂业务流程?
2. 准备测试环境
- 推荐在预发布/测试环境先压测,生产压测需谨慎
- 监控好服务器资源,防止压垮生产
3. 编写压测脚本/命令
ab(ApacheBench)示例
ab -n 10000 -c 100 http://127.0.0.1/api/test
wrk示例
wrk -t8 -c200 -d30s http://127.0.0.1/api/test
-t8
:8个线程-c200
:200个并发连接-d30s
:持续30秒
JMeter
- 用GUI设计测试计划,支持参数化、断言、分布式
- 可导出详细报告
Locust
4. 执行压测并监控
- 观察QPS、响应时间、错误率
- 同时用top、htop、free、iotop、iftop等监控服务器资源
- 监控数据库、缓存、队列等后端服务
5. 分析结果与定位瓶颈
- QPS/并发数是否达到预期?
- 响应时间是否可接受?
- 错误率是否过高?
- 哪一层资源耗尽?(CPU、内存、连接池、数据库、网络等)
6. 优化与回归
- 根据瓶颈点优化代码、配置、架构
- 再次压测,验证优化效果
五、注意事项
- 生产压测需谨慎,避免影响真实用户
- 压测数据要清理,避免脏数据污染
- 压测脚本要模拟真实业务场景,如登录、下单、带参数等
- 持续监控和报警,防止压垮服务
六、实际压测流程举例
- 用
wrk
压测API接口,设置并发和持续时间 - 监控Nginx/PHP-FPM/MySQL/Redis等资源
- 记录QPS、响应时间、错误率
- 优化代码/配置/架构
- 再次压测,直到性能达标
七、总结
- 压力测试是性能优化的必备手段
- 工具选型要结合场景,指标要全链路监控
- 先压测、再优化、再回归,持续提升系统性能