如何修复Valet池子进程退出引发的502错误?Laravel API登录失败
问题根源分析
从日志能直接定位两个核心问题:
- PHP-FPM进程被系统强制终止(SIGKILL信号9):这是macOS的内存不足杀手(oom_killer)触发的,当系统剩余内存不够时,会主动干掉占用内存高的PHP-FPM子进程,导致Nginx拿不到响应,返回502。
- PHP-FPM进程崩溃(SIGABRT信号6):信号6说明PHP代码触发了致命错误——比如未捕获的异常、内存溢出、扩展兼容性问题,直接导致进程终止,进而引发Nginx的502错误。
修复步骤
一、解决内存不足导致的SIGKILL
- 关掉不必要的后台应用:打开活动监视器,终止占用大量内存的非必要进程(比如浏览器多余标签页、闲置的大型IDE窗口)。
- 调整PHP内存限制:编辑PHP配置文件(路径一般是
/usr/local/etc/php/{你的PHP版本}/php.ini),修改参数:memory_limit = 256M # 4G内存机器设256M,8G设512M,根据自己机器调整 - 优化PHP-FPM进程池配置:编辑
/usr/local/etc/php/{你的PHP版本}/php-fpm.d/valet.conf(Valet专用进程池配置),调整进程数避免内存过载:
修改完重启PHP-FPM:pm.max_children = 4 # 4G内存设4-6,8G设8-10,按需调整 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3brew services restart php@{你的PHP版本}
二、排查PHP致命错误导致的SIGABRT
- 开启PHP详细错误日志:编辑
php.ini,开启错误日志并设置详细级别:log_errors = On error_log = /usr/local/var/log/php-error.log error_reporting = E_ALL display_errors = Off # 本地开发可以临时设On,方便看错误 - 触发登录请求后,查看PHP错误日志:
tail -f /usr/local/var/log/php-error.log,里面会有具体错误信息——比如OAuth类不存在、依赖未安装、数据库表缺失(比如oauth_clients表)。 - 检查Laravel OAuth配置:确认
config/auth.php和config/services.php里的OAuth配置正确,重新生成Passport客户端:php artisan passport:install。 - 检查依赖兼容性:运行
composer check-platform-reqs,确认所有依赖的PHP版本、扩展版本符合要求,重点排查Laravel Passport和当前PHP版本的兼容性。
三、Valet额外排查
- 确保Valet使用的PHP版本和Laravel项目一致:运行
valet use php@{你的项目PHP版本}切换版本,避免版本不兼容。 - 彻底重置Valet:先执行
valet uninstall,手动删除~/.config/valet目录,再重新安装valet install,确保配置完全干净。
内容的提问来源于stack exchange,提问作者DevonDahon
相关产品推荐
相关产品推荐

