宝塔面板安装swoole扩展后,须分别验证cli与fpm环境是否成功加载extension=swoole.so,并通过/status路由或usr2信号调用$server->stats()检查连接数与请求量实时更新,确保服务健康运行。

宝塔面板安装Swoole扩展后,必须验证服务是否真正加载、运行状态是否健康,否则WebSocket或HTTP服务器启动会失败,且PHP CLI与Web环境可能不一致导致线上功能异常。
确认Swoole扩展已加载
登录宝塔面板 → 进入“软件商店” → 找到已安装的PHP 8.0(或你实际使用的版本)→ 点击“设置” → 切换到“PHP信息”选项卡 → 点击“查看phpinfo()” → 在浏览器中按 Ctrl+F 搜索 swoole → 查看区块中是否出现 enabled 字样及版本号。
这一步不能只看“安装扩展”页的状态为“已启用”,因为该状态仅表示面板勾选了启用,不代表PHP引擎实际加载成功。
【关键前提】 若搜索不到swoole或显示disabled,说明扩展未生效,后续所有监控手段都无效,必须先解决加载问题。
区分CLI与FPM环境验证
在SSH终端中执行:php --ri swoole → 观察是否输出扩展信息和版本。
若报错“Extension 'swoole' not found”,说明CLI环境未加载;若正常输出但Web端报错,则FPM环境未生效。
检查CLI用的php.ini路径:php --ini → 输出中的“Loaded Configuration File”路径,确认该文件末尾有extension=swoole.so。
检查FPM用的php.ini路径:在宝塔PHP设置页 → “配置修改” → 查看顶部显示的配置文件路径,确保此处也添加了extension=swoole.so。
【不可逆操作】 两个php.ini都必须手动添加同一行,缺一不可;仅改一个会导致命令行能用、网页不能用,或反之。
调用$server->stats()获取实时运行指标
方法一:在Swoole HTTP服务器代码中加入/status路由
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
在你的服务启动脚本里,找到$http->on('request', ...)回调,在内部加一段判断:
if ($request->server['path_info'] === '/status') { $response->header('Content-Type', 'application/json'); $response->end(json_encode($this->stats())); return; }
保存后重启服务:php your_server.php restart → 访问 http://你的IP:端口/status → 返回JSON即表示监控接口就绪。
方法二:直接在命令行触发统计(适用于已运行的服务进程)
先获取主进程PID:ps aux | grep 'php your_server.php' | grep -v grep | awk '{print $2}'
再向该PID发送USR2信号:kill -USR2 PID号 → 此时Swoole会将stats日志写入/tmp/swoole_stats_*.log,可直接cat查看。
检查连接数与请求量是否实时更新
第一步:用curl反复请求/status接口,间隔3秒执行一次:while true; do curl http://127.0.0.1:9501/status | jq '.connection_num,.request_count'; sleep 3; done
第二步:另开一个终端,用ab或wrk压测接口:ab -n 100 -c 10 http://127.0.0.1:9501/
第三步:观察第一终端输出的connection_num是否短暂上升、request_count是否累加 → 若数值不变,说明服务未真正接收请求,可能是端口被防火墙拦截、监听地址写成127.0.0.1而非0.0.0.0、或进程未重启生效。
第四步:检查宝塔安全组与服务器iptables是否放行对应端口,例如9501。









