163 lines
3.8 KiB
Markdown
163 lines
3.8 KiB
Markdown
# 压力测试指南
|
||
|
||
## 测试工具选择
|
||
|
||
| 工具 | 特点 | 适用场景 |
|
||
|------|------|---------|
|
||
| **Locust** | Python 编写,Web UI,可模拟复杂用户行为 | 综合压测(推荐) |
|
||
| **wrk** | C 语言,性能极高,轻量级 | 极限性能测试 |
|
||
| **ab** | Apache 自带,简单易用 | 快速测试 |
|
||
| **k6** | 现代化,JavaScript 脚本 | CI/CD 集成 |
|
||
|
||
---
|
||
|
||
## 方案一:Locust(推荐)
|
||
|
||
### 安装
|
||
```bash
|
||
pip install locust
|
||
```
|
||
|
||
### 启动 Web UI
|
||
```bash
|
||
cd stress_test
|
||
locust -f locustfile.py --host=https://valuefrontier.cn
|
||
```
|
||
然后访问 http://localhost:8089
|
||
|
||
### 命令行模式(无 UI)
|
||
```bash
|
||
# 1000 用户,每秒增加 50 用户,运行 5 分钟
|
||
locust -f locustfile.py --host=https://valuefrontier.cn \
|
||
--users 1000 --spawn-rate 50 --run-time 5m --headless
|
||
```
|
||
|
||
### 分布式压测(多机)
|
||
```bash
|
||
# 主节点
|
||
locust -f locustfile.py --master --host=https://valuefrontier.cn
|
||
|
||
# 从节点(在其他机器执行)
|
||
locust -f locustfile.py --worker --master-host=<主节点IP>
|
||
```
|
||
|
||
---
|
||
|
||
## 方案二:wrk(极限性能测试)
|
||
|
||
### 安装(Linux)
|
||
```bash
|
||
# Ubuntu/Debian
|
||
apt-get install wrk
|
||
|
||
# CentOS/RHEL
|
||
yum install wrk
|
||
|
||
# 或从源码编译
|
||
git clone https://github.com/wg/wrk.git
|
||
cd wrk && make
|
||
```
|
||
|
||
### 基础测试
|
||
```bash
|
||
# 12 线程,400 连接,持续 30 秒
|
||
wrk -t12 -c400 -d30s https://valuefrontier.cn/api/stocks
|
||
|
||
# 带 Lua 脚本的复杂测试
|
||
wrk -t12 -c400 -d30s -s post.lua https://valuefrontier.cn/api/endpoint
|
||
```
|
||
|
||
### 逐步加压测试
|
||
```bash
|
||
# 测试脚本
|
||
for connections in 100 500 1000 2000 5000 10000; do
|
||
echo "=== Testing with $connections connections ==="
|
||
wrk -t12 -c$connections -d30s https://valuefrontier.cn/api/stocks
|
||
sleep 10
|
||
done
|
||
```
|
||
|
||
---
|
||
|
||
## 方案三:ab(Apache Bench)
|
||
|
||
### 安装
|
||
```bash
|
||
# Ubuntu/Debian
|
||
apt-get install apache2-utils
|
||
|
||
# CentOS/RHEL
|
||
yum install httpd-tools
|
||
```
|
||
|
||
### 基础测试
|
||
```bash
|
||
# 1000 请求,100 并发
|
||
ab -n 1000 -c 100 https://valuefrontier.cn/api/stocks
|
||
|
||
# 持续测试 60 秒
|
||
ab -t 60 -c 100 https://valuefrontier.cn/api/stocks
|
||
```
|
||
|
||
---
|
||
|
||
## 测试指标解读
|
||
|
||
### 关键指标
|
||
|
||
| 指标 | 含义 | 理想值 |
|
||
|------|------|--------|
|
||
| **RPS (Requests/sec)** | 每秒请求数 | 越高越好 |
|
||
| **Latency (ms)** | 响应延迟 | P99 < 500ms |
|
||
| **Error Rate** | 错误率 | < 1% |
|
||
| **Throughput** | 吞吐量 | 越高越好 |
|
||
|
||
### 性能等级参考
|
||
|
||
| 等级 | RPS | 延迟 P99 | 说明 |
|
||
|------|-----|---------|------|
|
||
| 优秀 | > 10,000 | < 100ms | 极限性能 |
|
||
| 良好 | 5,000-10,000 | < 200ms | 高性能 |
|
||
| 合格 | 1,000-5,000 | < 500ms | 正常水平 |
|
||
| 较差 | < 1,000 | > 500ms | 需要优化 |
|
||
|
||
---
|
||
|
||
## 测试建议
|
||
|
||
### 测试前准备
|
||
1. 确保服务器系统优化已完成(sysctl、limits.conf)
|
||
2. 关闭不必要的日志输出(loglevel 改为 warning)
|
||
3. 确保 Redis 正常运行
|
||
4. 准备监控工具(htop、iotop、nethogs)
|
||
|
||
### 测试步骤
|
||
1. **预热阶段**:100 用户,运行 2 分钟
|
||
2. **正常负载**:500 用户,运行 5 分钟
|
||
3. **高负载**:2000 用户,运行 5 分钟
|
||
4. **极限测试**:5000+ 用户,运行 10 分钟
|
||
5. **恢复测试**:降到 100 用户,观察系统恢复
|
||
|
||
### 监控命令
|
||
```bash
|
||
# 服务器上同时运行
|
||
htop # CPU/内存监控
|
||
iotop # 磁盘 IO 监控
|
||
nethogs # 网络流量监控
|
||
watch -n 1 'ss -s' # 连接数统计
|
||
tail -f /var/log/nginx/error.log # Nginx 错误日志
|
||
```
|
||
|
||
---
|
||
|
||
## 预期性能
|
||
|
||
基于 110.42.32.207(48核 128GB)+ Eventlet 16 Workers 配置:
|
||
|
||
| 场景 | 预期 RPS | 预期并发 |
|
||
|------|---------|---------|
|
||
| 静态页面 | 50,000+ | 100,000+ |
|
||
| API 请求 | 10,000-20,000 | 50,000+ |
|
||
| WebSocket | - | 100,000+ 连接 |
|
||
| 混合场景 | 5,000-10,000 | 30,000+ |
|