本文聚焦 RoadRunner v3(2023 系列)在纯 PHP 应用中的部署与性能验证。通过最小可运行示例、可验证配置与压测参数选型,避免状态污染与内存泄露,实现稳定高吞吐。


## 版本与环境校验


rr --version         # 期望输出 v2023.x 或 v3.x 版本信息
php -v               # PHP 8.1+ 推荐;确保 CLI 与 FPM 一致版本
composer --version

若未安装 `rr` 二进制,可按以下方式获取:


  • 方式 A(推荐,跨平台):

composer require spiral/roadrunner-cli
vendor/bin/rr get

  • 方式 B(手动下载):到 GitHub Releases 下载适配平台的 `rr` 二进制,放置到 `PATH` 或项目根目录。

## 最小可运行示例


安装依赖:


composer require spiral/roadrunner nyholm/psr7

`worker.php`:


<?php
use Spiral\RoadRunner\Worker;
use Spiral\RoadRunner\Http\HttpWorker;
use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7\Response;

$psr17 = new Psr17Factory();
$worker = Worker::create();
$http = new HttpWorker($worker, $psr17, $psr17, $psr17);

while ($req = $http->waitRequest()) {
    $resp = new Response(200, ['Content-Type' => 'application/json'], json_encode([
        'ok' => true,
        'time' => microtime(true),
    ]));
    $http->respond($resp);
}

`.rr.yaml`(v3 配置):


version: 3

server:
  command: "php worker.php"
  relay: "pipes"

http:
  address: ":8080"        # Windows 建议显式写 127.0.0.1:8080
  middleware: ["gzip", "headers"]
  pool:
    num_workers: 4         # 初始按 CPU 核心数设定
    max_jobs: 1000         # 单 worker 最大处理请求数,到达后重启以释放内存

logs:
  level: info

启动与验证:


rr serve -c .rr.yaml
curl http://127.0.0.1:8080/

期望返回 JSON:`{"ok":true,"time":...}`。


## 请求生命周期与无状态约束


  • RoadRunner 以长生命周期 worker 处理请求;必须保持无状态:
  • 禁止跨请求复用模型实例/全局数组缓存;每次请求独立构造并释放。
  • 连接使用框架提供的生命周期管理(DB/Redis);或在请求结束后显式关闭。
  • `max_jobs` 用于周期性重启 worker,处理可能的内存积累与泄露。

## 参数选型与压测流程(可验证)


基础压测(以 `wrk` 为例):


wrk -t 4 -c 200 -d 60s http://127.0.0.1:8080/ --latency

选型步骤:


  • 初始:`num_workers = CPU 核心数`;`max_jobs = 1000`。
  • 加压:并发 `100 → 200 → 500`,记录 `RPS/p95/p99/错误率/内存`。
  • 调参:
  • 内存呈阶梯上升:降低 `max_jobs`(如 500)以更频繁重启。
  • CPU 饱和且延迟升高:适度增加 `num_workers`;或在应用层减少阻塞操作。
  • 目标:在目标并发下 `错误率 < 0.1%` 且 `p95 满足 SLA`。

## 与框架集成提示


  • Laravel 集成可使用 Octane 的 RoadRunner 驱动(`php artisan octane:start --server=roadrunner`),但仍需遵守无状态设计与连接生命周期管理。
  • Symfony/Slim 等框架:保持请求纯函数化处理,避免静态累积。

## 生产运行建议


  • 使用进程管理(Linux `systemd`、Windows NSSM)守护 `rr serve`。
  • 日志与指标:收集 `worker 重启次数`、`内存峰值`、`慢请求分布`;异常升高时回看 `max_jobs` 与应用层对象生命周期。
  • 路由与配置:预生成缓存,减小每次请求开销。

## 注意事项


  • Windows 平台可正常运行 RoadRunner;Swoole 不支持 Windows。
  • `relay: pipes` 适用于本机与大多数部署;如跨容器/远程需要,使用 `tcp://` 并评估网络成本。
  • 避免在 `worker.php` 中使用 `sleep/usleep` 等阻塞操作;耗时任务交由队列系统处理。

## 结语


RoadRunner v3 提供稳定的高性能 PHP 运行时。通过最小示例验证、.rr.yaml 的核心参数选型与压测数据驱动的调优,可在生产实现更高吞吐与更稳定的延迟表现。



点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部