本文目录导读:

为 PHP 项目模拟高并发压力测试,推荐使用 Swoole 或 Workerman 等常驻内存框架,配合专业压测工具,以下是完整方案:
核心工具选择
Apache Bench (ab) - 快速简单
# 模拟1000并发,发送2000请求 ab -n 2000 -c 1000 http://your-api.com/test
wrk - 高性能压测
# 使用4线程,保持100连接,持续30秒 wrk -t4 -c100 -d30s http://your-api.com/test
Siege - 多功能压测
# 并发50用户,持续60秒 siege -c50 -t60s http://your-api.com/test
JMeter - 图形化专业工具
- 配置线程组(并发数)
- 添加 HTTP 请求采样器
- 设置持续时间和循环次数
PHP代码优化(关键)
<?php
// 使用 Swoole 构建高并发服务
$http = new Swoole\Http\Server("0.0.0.0", 9501);
$http->set([
'worker_num' => 4, // 根据CPU核心数设置
'max_request' => 10000, // 热重启
'dispatch_mode' => 2, // 固定分配
]);
$http->on('request', function ($request, $response) {
// 业务逻辑
$response->end("Hello World");
});
$http->start();
模拟真实并发场景
场景1:瞬时高并发(秒杀)
# 同时启动100个并发请求
seq 1 100 | xargs -I {} -P 100 curl http://localhost:9501/test &
场景2:持续压力测试
// Python 并发脚本示例
import threading
import requests
def stress_test():
while True:
try:
r = requests.get('http://localhost:9501/test')
print(f"Status: {r.status_code}")
except:
pass
# 启动50个线程
threads = [threading.Thread(target=stress_test) for _ in range(50)]
[t.start() for t in threads]
性能瓶颈定位
实时监控资源
# 每秒刷新系统状态 watch -n1 'netstat -ant | grep :80 | wc -l; echo "---"; top -bn1 | grep PHP'
数据库连接池
// Swoole 连接池示例
$pool = new Swoole\Database\MysqliPool([
'host' => '127.0.0.1',
'user' => 'root',
'password' => '',
'database' => 'test',
'max_connections' => 100, // 根据并发数调整
]);
生产环境压测建议
渐进式增加并发
# 从50并发开始,每次增加50
for c in 50 100 200 500; do
ab -n 10000 -c $c http://localhost/test
sleep 2
done
监控关键指标
- QPS (每秒查询数)
- 响应时间 (p50/p95/p99)
- 错误率
- 内存使用
优化PHP配置
; php.ini max_execution_time = 30 memory_limit = 256M ; 开启OPcache opcache.enable = 1 opcache.memory_consumption = 128 opcache.max_accelerated_files = 10000
实战示例(完整压测流程)
# 1. 启动优化后的服务 php -S 0.0.0.0:8080 -t public server.php # 2. 预热OPcache ab -n 1000 -c 10 http://localhost:8080/api/users # 3. 正式压测(模拟1000并发) wrk -t8 -c1000 -d60s --latency http://localhost:8080/api/users # 4. 分析结果 # 关注:Requests/sec, Latency Distribution
注意事项
- 不要压测生产环境:使用测试或预发布环境
- 观察连接池数量:避免数据库连接耗尽
- 使用本地网络:排除网络延迟干扰
- 逐步增加负载:找到系统瓶颈点
- 记录所有数据:包括服务器资源使用情况
对于传统PHP(非Swoole),建议使用 Nginx + PHP-FPM 架构,压测前先调整 PHP-FPM 配置:
; www.conf pm = dynamic pm.max_children = 150 pm.start_servers = 20 pm.min_spare_servers = 10 pm.max_spare_servers = 30 pm.max_requests = 500
通过这种组合方案,你可以在安全的前提下,准确测试PHP项目的高并发处理能力。