php 压力测试(Stress Test/Load Test)


一、压力测试的目标

  1. 评估系统最大承载能力(QPS、并发数、吞吐量)
  2. 发现性能瓶颈(CPU、内存、数据库、网络等)
  3. 验证高并发下的稳定性(错误率、超时、崩溃)
  4. 辅助容量规划和扩容决策
  5. 验证优化效果

二、常用压力测试工具

  • 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
  • -n 10000:总请求数
  • -c 100:并发数

wrk示例

wrk -t8 -c200 -d30s http://127.0.0.1/api/test
  • -t8:8个线程
  • -c200:200个并发连接
  • -d30s:持续30秒

JMeter

  • 用GUI设计测试计划,支持参数化、断言、分布式
  • 可导出详细报告

Locust

  • 用Python写用户行为脚本,支持分布式

4. 执行压测并监控

  • 观察QPS、响应时间、错误率
  • 同时用top、htop、free、iotop、iftop等监控服务器资源
  • 监控数据库、缓存、队列等后端服务

5. 分析结果与定位瓶颈

  • QPS/并发数是否达到预期?
  • 响应时间是否可接受?
  • 错误率是否过高?
  • 哪一层资源耗尽?(CPU、内存、连接池、数据库、网络等)

6. 优化与回归

  • 根据瓶颈点优化代码、配置、架构
  • 再次压测,验证优化效果

五、注意事项

  • 生产压测需谨慎,避免影响真实用户
  • 压测数据要清理,避免脏数据污染
  • 压测脚本要模拟真实业务场景,如登录、下单、带参数等
  • 持续监控和报警,防止压垮服务

六、实际压测流程举例

  1. wrk压测API接口,设置并发和持续时间
  2. 监控Nginx/PHP-FPM/MySQL/Redis等资源
  3. 记录QPS、响应时间、错误率
  4. 优化代码/配置/架构
  5. 再次压测,直到性能达标

七、总结

  • 压力测试是性能优化的必备手段
  • 工具选型要结合场景,指标要全链路监控
  • 先压测、再优化、再回归,持续提升系统性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贵哥的编程之路(热爱分享 为后来者)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值