CC 咖啡猫的工作空间 Coding Space

性能压测实践

压测验证系统性能瓶颈,是容量规划和性能优化的基础。


1. 压测工具对比

工具 特点 适用场景
JMeter 图形界面、功能全面 Web、API、DB
wrk/wrk2 轻量、Linux 原生 简单 HTTP 压测
ab (ApacheBench) 简单易用 快速单接口
k6 JS 脚本、云报告 现代云原生
Locust Python 脚本、分布式 复杂场景模拟
Gatling Scala 脚本 高并发 API

2. JMeter 基础使用

线程组配置:
├── 线程数:1000          # 并发用户数
├──  Ramp-Up:100         # 启动时间(秒)
├── 循环次数:10          # 每个用户执行次数
└── 持续时间:300秒       # 指定压测时长

HTTP请求:
├── 协议:https
├── 服务器:api.example.com
├── 方法:POST
├── 路径:/order/create
└── Body: {"userId": 123, "amount": 100}

聚合报告指标:
├── Requests/sec (TPS)
├── Average Response Time
├── 90%/95%/99% Response Time
└── Error %

3. wrk 快速压测

# 简单压测
wrk -t12 -c400 -d30s http://api.example.com/users

# 使用 Lua 脚本(自定义请求)
wrk -t4 -c100 -d30s -s post.lua http://api.example.com/order

# post.lua 示例
wrk.method = "POST"
wrk.body   = '{"userId":123,"amount":100}'
wrk.headers["Content-Type"] = "application/json"

4. Locust 分布式压测

# locustfile.py
from locust import HttpUser, task, between

class OrderUser(HttpUser):
    wait_time = between(1, 3)

    @task(3)  # 权重3,概率更高
    def create_order(self):
        self.client.post("/order/create", json={
            "userId": random.randint(1, 10000),
            "amount": 100
        })

    @task(1)
    def query_order(self):
        order_id = random.randint(1, 100000)
        self.client.get(f"/order/{order_id}")
# 本地运行
locust -f locustfile.py --host=http://api.example.com

# 分布式运行(1主 + 3从)
locust -f locustfile.py --master --expect-workers 3

5. 常见性能指标

指标 说明 参考值
QPS/TPS 每秒请求数 根据系统预期
RT 平均响应时间 < 200ms
P99 RT 99%请求响应时间 < 500ms
Error Rate 错误率 < 0.1%
CPU 使用率 压测时 CPU 占用 < 80%
内存使用 JVM 堆使用 < 80%
连接数 DB/Redis 连接池 < 80% 容量

6. 压测流程

1. 单接口基准测试 → 确定单接口性能上限
2. 混合场景压测   → 模拟真实用户行为
3. 峰值压测       → 春节/双十一预期流量
4. 稳定性测试     → 长时间运行是否内存泄漏
5. 瓶颈定位       → Profiler 找热点
6. 优化 & 复测    → 验证优化效果

7. 分层压测指标

层次 关注点 目标
网关层 QPS、上游超时 < 50ms RT
服务层 业务逻辑耗时 < 100ms RT
缓存层 命中率、并发读 > 95% 命中
数据层 SQL耗时、连接数 < 20ms 单查询

8. 注意事项

  1. 压测环境隔离:生产压测必须得到授权,使用影子表/影子库
  2. 预热 JVM:压测前先预热,避免冷启动影响结果
  3. 避免资源竞争:压测机与被测服务分开部署
  4. 记录基线:每次压测记录结果,对比优化效果
  5. 监控全链路:压测时同步观察监控,不只是看压测报告

最后更新:2026/05/13