AWS EC2实例执行Laravel artisan route:cache时触发栈溢出错误
问题解决方案
排查路由中的闭包使用
Laravel路由缓存不支持直接用闭包定义路由(如Route::get('/', function() { return view('welcome'); })),如果存在这类路由,要把闭包替换成控制器方法。同时检查路由里是否有递归引用的闭包,或者闭包引用了自身关联的对象,这会导致序列化时触发无限递归。调整PHP栈大小配置
实例内存升级不直接对应PHP栈内存,需要单独修改PHP配置:- 执行
php --ini找到php.ini文件的路径; - 打开文件后修改
zend.max_allowed_stack_size的值,比如设置为16M:zend.max_allowed_stack_size = 16777216; - 重启Apache(
sudo systemctl restart apache2)或PHP-FPM(如果用FPM,执行sudo systemctl restart php8.2-fpm,版本根据实际情况调整);
注意:栈大小要逐步调整,避免设置过大引发内存溢出风险。
- 执行
更新Serializable Closure包
错误出现在laravel/serializable-closure组件中,可能是版本bug导致,执行composer update laravel/serializable-closure更新到最新稳定版,或者降级到和当前Laravel版本兼容的稳定版本。排查路由循环依赖
临时注释部分路由,逐步执行php artisan routes:cache,定位是否存在路由引入的类或服务有循环依赖,导致序列化时无限递归。清理缓存后重试
先清理现有缓存:php artisan cache:clear php artisan route:clear再重新执行
php artisan routes:cache。
内容的提问来源于stack exchange,提问作者neazk
相关产品推荐
相关产品推荐

