本文目录导读:

Laravel接口压测的几种主流方案:
使用 Apache Bench (ab)
# 基本用法 ab -n 1000 -c 100 http://your-domain.com/api/users # 参数说明 -n 1000 # 总请求数 -c 100 # 并发数 -k # 启用KeepAlive -t 60 # 测试持续时间(秒)
使用 wrk
# 安装
brew install wrk # macOS
apt-get install wrk # Ubuntu
# 基本用法
wrk -t12 -c400 -d30s http://your-domain.com/api/users
# 使用POST请求
wrk -t12 -c400 -d30s \
-H "Content-Type: application/json" \
-s post.lua \
http://your-domain.com/api/login
使用 siege
# 安装
brew install siege
# 基本用法
siege -c 100 -r 10 http://your-domain.com/api/users
# 带POST请求
siege -c 100 -r 10 \
-H "Content-Type: application/json" \
-f urls.txt
Laravel 项目优化配合
1 环境配置优化
// .env 文件 APP_ENV=production APP_DEBUG=false APP_URL=http://your-domain.com # 缓存配置 CACHE_DRIVER=redis SESSION_DRIVER=redis
2 优化命令
# 清除并缓存配置 php artisan config:cache php artisan route:cache php artisan view:cache php artisan optimize # 生成类映射加载优化 composer dump-autoload -o
压测报告分析
1 ab 结果解读
Completed 1000 requests # 已完成请求数 Request per second: 500.43 # 每秒请求数 Time per request: 199.82ms # 每个请求平均时间 Failed requests: 0 # 失败请求数 Transfer rate: 2.45 MB/s # 传输速率
2 关注指标
- RPS (Requests Per Second):每秒请求数
- 响应时间:平均、中位数、P99等
- 错误率:超时、连接失败等
- 吞吐量:网络传输速率
高级压测方案
1 使用 k6 (推荐)
// test.js
import http from 'k6/http';
import { sleep, check } from 'k6';
export const options = {
vus: 100, // 虚拟用户数
duration: '30s', // 测试时长
thresholds: {
http_req_duration: ['p(95)<2000'], // 95%请求应在2秒内
},
};
export default function () {
const res = http.get('http://your-domain.com/api/users');
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 500ms': (r) => r.timings.duration < 500,
});
sleep(1);
}
k6 run test.js
2 使用 Locust (Python)
# locustfile.py
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 5) # 用户等待时间
@task(3) # 权重
def view_users(self):
response = self.client.get("/api/users")
if response.status_code != 200:
response.failure("Got wrong response")
@task(1)
def create_user(self):
self.client.post("/api/users", json={
"name": "test",
"email": "test@example.com"
})
locust -f locustfile.py --host=http://your-domain.com
压测最佳实践
1 准备工作
# 1. 开启Laravel性能优化 php artisan config:cache php artisan route:cache php artisan view:cache # 2. 使用Redis作为缓存和session驱动 # 3. 数据库添加索引 # 4. 开启OPcache
2 注意事项
- 渐进式加压:从低并发开始逐步增加
- 监控系统资源:CPU、内存、IO
- 分开测试:不同接口分别压测
- 模拟真实场景:考虑用户登录态、token等
- 预热:先跑少量请求让系统预热
3 常见瓶颈识别
# 查看数据库慢查询 mysql> SHOW FULL PROCESSLIST; mysql> SET GLOBAL slow_query_log = 'ON'; # 查看PHP日志 tail -f storage/logs/laravel.log # 查看系统资源 top -bn1 | head -5 iostat -x 1
示例:完整压测脚本
#!/bin/bash
# 压测脚本 benchmark.sh
URL=$1
CONCURRENCY=${2:-100}
REQUESTS=${3:-1000}
echo "Starting benchmark for $URL"
echo "Concurrency: $CONCURRENCY"
echo "Total requests: $REQUESTS"
# 预热
ab -n 10 -c 5 $URL > /dev/null 2>&1
sleep 2
# 正式测试
ab -n $REQUESTS -c $CONCURRENCY -k $URL
echo "Benchmark completed"
推荐方案:
- 快速测试:
ab或wrk - 复杂场景:
k6或Locust - 生产环境:专业压测平台 (JMeter, LoadRunner)
压测前确保在类似生产环境的配置下进行,并注意不要对生产环境造成影响。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播