参考资料

  1. Fresns 基于 Swoole 的运行状态输出
  2. Octane 的 Worker 进程未能正确初始化,导致处理请求的核心对象是空的,而这个异常又被外层的登录或安全拦截机制捕获,显示成了登录页
  3. 占用 8000 的正是你之前启动的 octane 进程
  4. Swoole 6.2.2 扩展正在为 PHP 8.3 编译的过程
  5. 端口还是被占用,但 PID 变了(从 244xx 变成了 261xx)。
  6. 按 2 核 2G 的标准,把你的 config/octane.php 调整好
  7. Fresns 的队列配置核心是在 .env 文件中将 QUEUE_CONNECTION
  8. Laravel Octane 与 Swoole 扩展的版本不兼容

Fresns 基于 Swoole 的运行状态输出

这是 Fresns 基于 Swoole 的运行状态输出(php fresns start 或类似命令启动后打印的进程/配置信息)。下面逐项解释含义,并指出可能需要注意的地方。

进程信息

"masterProcessId": 3795,   // 主进程 PID(Swoole Master)
"managerProcessId": 3797,  // 管理进程 PID(Swoole Manager)
  • Master 进程:负责创建/回收 Manager 和 Worker,接收信号。

  • Manager 进程:负责 fork/管理 Worker 与 Task Worker。

应用与监听

"appName": "Fresns",
"host": "127.0.0.1",
"port": "8000",
  • 只监听 127.0.0.1:8000,意味着只能本机访问。
    如果你想让外网/局域网访问,需要改成 0.0.0.0(通常通过 Nginx 反代则保持 127.0.0.1 即可)。

Worker 配置

"workers": "1",        // 业务 Worker 数量,仅 1 个
"taskWorkers": 4,      // Task Worker 4 个(处理异步任务)
"maxRequests": "500",  // 每个 Worker 处理 500 次请求后重启(防内存泄漏)

workers: 1 对生产环境偏低,通常建议:

workers = CPU 核数 或 CPU 核数 * 2

不过如果前面有 Nginx 做负载、且是单机小站,1 个也能跑,但并发能力有限。

路径

"publicPath": "/www/wwwroot/www.madama.cn/fresns/public",
"storagePath": "/www/wwwroot/www.madama.cn/fresns/storage",
  • publicPath:Web 入口目录(Nginx root 应指向这里)。

  • storagePath:日志、缓存、上传等运行时数据目录。

Swoole 服务器选项

"defaultServerOptions": {
    "enable_coroutine": false,   // 关闭协程
    "daemonize": false,          // 非守护进程模式(前台运行)
    "log_file": ".../swoole_http.log",
    "log_level": 5,              // 日志级别 5(较详细)
    "max_request": "500",
    "package_max_length": 10485760,  // 单包最大 10MB
    "reactor_num": "1",              // Reactor 线程数 1
    "send_yield": true,
    "socket_buffer_size": 10485760   // socket 缓冲 10MB
}

值得注意的几点

  1. enable_coroutine: false
    Fresns 这个启动方式没有开启协程,说明它更偏向传统同步阻塞模式(兼容性更好,但高并发能力弱于协程模式)。

  2. daemonize: false
    当前是前台运行。生产环境一般用 supervisor 或 nohup/systemd 来守护;若用 daemonize: true 则自己后台化,但不利于进程管理。

  3. reactor_num: 1 + workers: 1
    整体并发规格很小,适合开发/低流量站点。流量上来后建议:

    • reactor_num = CPU 核数

    • workers = CPU 核数 ~ 2 倍

    • 视情况开启 enable_coroutine: true

  4. package_max_length: 10MB
    如果上传大文件(视频等),这里和 Nginx 的 client_max_body_size 都要相应调大,否则会 413。

  5. 日志文件
    storage/logs/swoole_http.log,排查启动/运行问题先看这个文件。

常见配套检查

  • Nginx 反代示例:

location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
  • 确认 storage 目录可写(Swoole 进程用户权限)。

  • 端口 8000 未被占用:lsof -i:8000 或 ss -lntp | grep 8000。


如果你是想调优或排错,可以告诉我:

  • 站点流量/并发大概多少?

  • 是否用 Nginx 反代?

  • 遇到的具体问题(启动失败 / 502 / 卡顿 / 上传失败)?

我可以给出具体的配置修改建议。

作者:王壹杰
时间:2026-10-02 10:27:07
来源:https://fresns.ciilii.com/