高并发场景下必须选worker模式。php_server仍是每请求启动销毁模型,开销大、qps低;worker模式让php常驻内存,opcache复用率近100%,框架冷启动归零,但需手动处理全局状态污染、连接复用及$_server缺失等问题。

FrankenPHP高并发时该用php_server还是worker模式
直接结论:高并发场景下,必须选worker模式。php_server只是把PHP-FPM逻辑搬到Go里跑,仍属“每请求启动+销毁”模型,框架加载、类自动加载、PDO连接初始化等开销照旧,压测QPS上不去、CPU空转严重是常态。
worker模式让PHP代码常驻内存,frankenphp_handle_request()接管整个请求生命周期,OPcache复用率接近100%,Laravel/Symfony这类框架的冷启动开销直接归零。但代价是——你得为进程常驻带来的副作用负责。
- 传统php_server指令适合迁移过渡期或极轻量API(单文件无框架),配置简单:
php_server+num_threads 4 - worker模式必须写独立入口脚本(如
public/worker.php),且需手动调用frankenphp_handle_request(),不能直接扔index.php - worker模式下
$_SERVER字段不全(比如缺少SCRIPT_NAME),框架路由可能失败;Laravel需改用Illuminate\Foundation\Application::handle()封装,TP6需包住thinkphp/start.php
Worker模式下哪些代码习惯会立刻翻车
进程常驻不是魔法,它会把原本被FPM自动擦除的“脏状态”暴露出来。最典型的三类问题:
-
static $cache = []或global $user_id:下次请求进来,值还是上一个用户的,数据污染无声无息 - 手动
new PDO()后没unset($pdo)或没启用PDO::ATTR_PERSISTENT:连接数缓慢上涨,netstat -an | grep :3306 | wc -l超过num_threads × 5就危险了 - 在
worker.php顶层或中间件里调session_start():它会在worker启动时执行一次,后续所有请求都因headers已发送而失败
验证方法很简单:在请求末尾加一行var_dump(array_keys(get_defined_vars()));,看有没有意外残留的变量名。
OPcache和memory_limit怎么配才不互相打架
worker模式下OPcache不是“可选项”,而是生死线。设opcache.enable=0,每个请求重编译全部PHP文件,CPU 100%、QPS断崖下跌——这不是慢,是根本没走缓存路径。
- 确认生效:进容器执行
php -i | grep "opcache.enabled",输出必须是On(不是1或true);若为Off,检查是否被其他.ini文件覆盖 -
opcache.memory_consumption至少设384(MB),Composer autoload + Laravel代理类轻松超15000文件,256会导致oom_count > 0 -
memory_limit不能只看配置值,要实测:在worker.php入口打点memory_get_peak_usage(true),再乘以num_threads,确保结果
部署后必须调opcache_reset(),否则新代码永远不执行——worker进程不会自动感知文件变更,opcache_invalidate()逐文件清理还会引发跨进程不一致。
num_threads设多少才算安全
别信“CPU核心数×2”这个默认值。8核机器设16线程,memory_limit=128M就占掉2GB,再叠加OPcache、框架实例、Redis连接池,OOM就在上线后第一波流量里发生。
- 先按内存反推:
num_threads × memory_limit ,例如16GB机器,留2GB余量,<code>memory_limit=128M时最多撑住10个线程 - 首次压测建议从
num_threads 4起步,观察oom_count是否归零、opcache_get_status()['memory_usage']['used_memory']是否稳定 -
max_threads只作弹性兜底,设为num_threads + 4足够,设太高反而加剧GC压力和上下文切换
真正容易被忽略的是:Symfony/Laravel在worker模式下,$_SERVER残留、数据库连接池未限流、日志句柄泄漏,这些不会报错,只会让第53个并发请求开始变慢、超时、卡死——参数调得再细,不配合代码层改造,高并发就是纸面数字。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











