opcache 和 jit 是 php 层优化机制,需修改 php.ini 并重启服务生效;laravel 项目应优先执行 config:cache、route:cache、view:cache 命令,并根据项目规模调大 opcache.memory_consumption 至 512mb 或 1024mb。

Opcache 和 JIT 不是 Laravel 自己的功能,而是 PHP 层的优化机制;直接在 Laravel 里“开启”没意义,必须改 PHP 配置并验证生效。
确认当前 PHP 是否已启用 Opcache
很多 Laravel 项目跑在 Docker 或共享主机上,opcache.enable 默认是 0(关闭)。不检查就调参,等于白忙。
执行以下命令查看真实状态:
php -i | grep opcache
重点关注这几项是否为 On:
opcache.enable => On-
opcache.enable_cli => Off(CLI 下默认关,Laravel artisan 命令不走 Opcache,但 Web 请求会走) -
opcache.revalidate_freq => 2(建议设为 0 仅开发环境,生产环境保持 2–60 秒)
PHP 8.1+ 才能用 JIT,且需手动开启
JIT 不是开个开关就提速的魔法,它对 CPU 更敏感、内存占用略高,对 Laravel 这类 I/O 密集型应用收益有限——实测多数场景提升不到 5%,但配置错误反而导致 500 错误。
要在 php.ini 中同时设置:
-
opcache.jit=1255(推荐值,含函数调用、循环、返回等常见优化) -
opcache.jit_buffer_size=256M(至少 128M,太小会禁用 JIT) -
opcache.enable=1(JIT 依赖 Opcache,必须先开)
改完必须重启 PHP-FPM 或 Apache/Nginx,仅 reload 不生效。
Laravel 项目中真正影响响应速度的其实是缓存配置
Opcache 解决的是 PHP 文件编译层,而 Laravel 的路由、配置、视图编译等仍可能拖慢首字节(TTFB)。别只盯着 PHP.ini。
部署后务必运行这些命令:
-
php artisan config:cache(把config/合并成单文件,跳过多次读取) -
php artisan route:cache(仅适用于没闭包路由的项目) -
php artisan view:cache(预编译 Blade 模板)
注意:route:cache 会忽略 routes/channels.php 和动态注册的路由,本地开发时别长期开着。
Opcache 内存不足会导致“随机 500”或页面空白
默认 opcache.memory_consumption=128(MB)对中大型 Laravel 项目远远不够,尤其开了 Horizon、Telescope 或大量包时。
观察方法:
- 访问
/opcache-status.php(需自己写个简单脚本暴露opcache_get_status()) - 看
memory_usage.used_memory_human是否接近memory_usage.total_memory_human - 如果
opcache.hit_rate低于 95%,大概率是内存溢出后频繁踢出缓存
建议值:opcache.memory_consumption=512(中小项目),1024(含 Scout、Nova、多语言包的项目)。
Opcache 和 JIT 的调试成本远高于 Laravel 自身缓存优化,上线前务必用 ab 或 hey 对比 TTFB 和吞吐量,而不是只看 phpinfo 里的“enabled”。










