必须优先通过宝塔软件商店安装swoole扩展;若无对应选项,则用/www/server/php/80/bin/pecl install swoole安装,再向/www/server/php/80/etc/php.ini和/www/server/php/80/bin/php.ini均添加extension=swoole.so,重启php后执行php --ri swoole验证。

要在宝塔面板中完成Swoole扩展安装并立即开展全链路压测以支撑容量规划,必须确保PHP环境、Swoole版本、服务启动方式与压测工具全部协同就绪,任何一环缺失都将导致QPS估算失真或压测结果不可信。
确认PHP版本与宝塔环境兼容性
进入宝塔面板 → 软件商店 → 找到已安装的PHP版本(推荐使用8.0及以上),点击“设置”→“安装扩展”,检查列表中是否已有swoole。若无,则说明需手动编译安装,【切勿直接启用未编译的swoole扩展,会导致PHP启动失败】。
打开终端,执行bt命令,选择“7”查看PHP管理路径,确认当前PHP主版本号(如80对应php8.0);该数字将用于后续cd路径和配置文件定位。
编译安装Swoole扩展
方法一:通过宝塔内置PECL命令(推荐)
① 进入对应PHP的bin目录:cd /www/server/php/80/bin
② 执行安装:./pecl install swoole,过程中遇到提示时按回车接受默认选项;安装成功后会输出类似Installing '/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/swoole.so'的路径。
③ 向php.ini写入扩展声明:echo "extension=swoole.so" >> /www/server/php/80/etc/php.ini
④ 重启PHP服务:bt restart → 选择对应PHP版本编号(如输入80)→ 等待重启完成。
方法二:手动编译(仅当PECL失败时启用)
下载源码:wget https://github.com/swoole/swoole-src/archive/refs/tags/v5.1.5.tar.gz → 解压 → 进入目录 → 执行phpize → ./configure --with-php-config=/www/server/php/80/bin/php-config → make && make install;后续步骤同方法一③④。
验证Swoole是否生效
创建临时验证文件/www/test_swoole.php,内容为:
<?php echo extension_loaded('swoole') ? '✅ Swoole已加载' : '❌ 未加载'; ?>
在浏览器访问http://你的域名/test_swoole.php,返回✅即表示扩展已就绪;若失败,请检查php --ri swoole输出是否含“swoole support => enabled”字段。
部署可压测的Swoole HTTP服务
新建/www/server/test_http.php,写入最小化协程HTTP服务:
<?php $server = new Swoole\Http\Server('0.0.0.0', 9501); $server->on('request', function ($request, $response) { $response->header('Content-Type', 'application/json'); $response->end(json_encode(['code'=>0, 'msg'=>'OK', 'time'=>time()])); }); $server->start();
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
该服务不依赖Nginx,直接监听9501端口,避免反向代理引入额外延迟干扰压测基线数据。
在终端执行nohup php /www/server/test_http.php &启动服务;用netstat -tuln | grep 9501确认端口已监听。
配置压测客户端并执行全链路压测
方法一:使用ab(Apache Bench)快速验证
执行ab -n 10000 -c 1000 http://127.0.0.1:9501/,观察Requests per second值;该数值即为单机理论吞吐上限,用于反推集群节点数。
方法二:使用Swoole原生协程压测脚本(更贴近真实业务)
创建/www/bench.php,填入以下代码:
<?php Co::set(['hook_flags' => SWOOLE_HOOK_ALL]); $wg = new Swoole\Coroutine\WaitGroup(); $concurrency = 200; $total = 10000; for ($i = 0; $i add(); go(function () use ($wg) { $client = new Co\Http\Client('127.0.0.1', 9501); $client->get('/'); $client->close(); $wg->done(); }); } $wg->wait(); echo "✅ 完成{$total}次请求\n";
运行php /www/bench.php,记录耗时;对比ab结果,若相差超15%,说明协程调度或IO等待存在瓶颈,需检查ulimit -n是否≥65535。
方法三:接入Prometheus+Grafana采集实时指标
在Swoole服务中启用stats功能:$server->set(['stats_file' => '/tmp/swoole_stats']);,再配合swoole_exporter暴露指标,即可在Grafana中绘制QPS、内存增长、协程数等曲线,支撑容量水位线设定。
根据压测结果做容量规划
记录单节点QPS峰值(如ab测得12480 QPS)、平均响应时间(如8.3ms)、CPU占用率(top中%us值)三组核心数据。
若业务目标为10万QPS,按80%负载安全水位计算:100000 ÷ 0.8 ÷ 12480 ≈ 11台;向上取整为12台服务器。
内存维度校验:单节点压测中RSS稳定在320MB,则12台总内存需求为320 × 12 = 3840MB;预留20%冗余后,需规划至少4.6GB可用内存。
执行cat /proc/sys/net/core/somaxconn,若输出小于65535,需执行echo 65535 > /proc/sys/net/core/somaxconn并写入/etc/sysctl.conf,否则高并发连接会触发EAGAIN错误。










