frankenphp worker模式下laravel内存涨至500mb属严重异常,正常应为80–150mb;主因是opcache配置过大、redis缓存未限容、cache_driver=file锁堆积、序列化器未压缩或调试工具(如telescope)累积快照,需排查php.ini、config/cache.php及服务提供者逻辑。

不正常。Laravel 在 FrankenPHP 上单请求常驻内存涨到 500MB,基本可以判定是配置或代码层出了明显问题,不是 worker 模式该有的表现。
php_server 模式下 Laravel 启动一次后常驻,但内存应稳定在 80–150MB 区间(视项目规模、OPcache 配置、缓存驱动而定)。500MB 是严重异常值,常见于以下几类情况:
-
opcache.memory_consumption被设得过大(比如 512 或 1024),且未配合opcache.max_accelerated_files合理调优 - Redis 缓存驱动未设
maxmemory,Laravel 大量写入未清理的缓存键(如Cache::rememberForever()+ 全模型集合) - 使用了
CACHE_DRIVER=file,高并发下文件锁堆积 + 序列化大对象,导致 PHP 进程反复 fork 或内存无法释放 - Laravel 的
config/cache.php中启用了未压缩的序列化器(如默认serialize),缓存一个含 100 条 Eloquent 模型的数组,Redis 内存占用可能超 20MB,常驻进程会把它全 load 进内存
验证和定位步骤:
- 启动 FrankenPHP 时加
--debug参数,观察日志里是否有重复加载扩展、循环 require、或大量Cache::put()调用 - 在
bootstrap/app.php开头插入:ini_set('memory_limit', '256M');,如果立即报Fatal error: Allowed memory size of ... exhausted,说明框架初始化阶段就失控,重点查服务提供者或AppServiceProvider中的全局缓存预热逻辑 - 用
redis-cli --bigkeys扫描 Redis,看是否存在单个 key > 1MB 的缓存项(典型如未分页的Model::all()结果) - 检查是否误开了
APP_DEBUG=true且用了 Telescope 或 Clockwork —— 这些工具在 worker 常驻模式下会持续累积请求快照,内存只增不减
FrankenPHP 的 worker 模式本身不会导致内存暴涨,它只是让 PHP 进程不退出;真正吃内存的是你留在内存里的东西:未释放的模型静态属性、未关闭的 PDO 连接、没清理的缓存引用、以及被 OPcache 锁死的大脚本。别怪 FrankenPHP,先翻 config/cache.php 和 php.ini。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











