Laravel项目页面持续加载无法打开,急求技术解决方案
检查数据库连接阻塞
页面无限加载大概率和数据库死锁、慢查询或连接池耗尽有关。直接登进数据库执行:SHOW PROCESSLIST;盯着
State列,找长时间处于Sleep的进程,或者标记Locked的阻塞进程,杀掉这些异常进程后再刷新页面测试。排查中间件/路由死循环
打开app/Http/Kernel.php,先把$middleware里的全局中间件临时注释掉一半,测试页面是否能加载。如果恢复,再逐一恢复中间件定位问题;如果还是不行,检查路由分组绑定的中间件,或者看控制器里有没有递归调用、无限重定向的逻辑。检查PHP-FPM状态(Apache搭配FPM的情况)
执行命令看FPM进程状态:sudo systemctl status php-fpm要是看到进程崩溃、重启频繁,或者访问FPM状态页(需提前在配置里开启)发现队列堆满,就调整
php-fpm.conf里的pm.max_children、pm.start_servers参数,增大进程数试试。测试最简路由
在routes/web.php里加一条最基础的路由:Route::get('/test', function () { return 'Test OK'; });访问
your-domain/test,如果能正常显示内容,说明问题出在原有路由、控制器或业务逻辑里,逐步往回加代码排查。核对文件权限
再确认一遍storage和bootstrap/cache的权限,Apache或PHP进程得有读写权限:chown -R www-data:www-data storage bootstrap/cache chmod -R 775 storage bootstrap/cache别嫌麻烦,权限问题经常藏得很深。
启用PHP级错误日志
有时候Laravel日志没抓到底层PHP错误,会直接导致进程挂起。找到php.ini修改这几项:error_log = /var/log/php_errors.log log_errors = On error_reporting = E_ALL重启Apache后再访问页面,去
/var/log/php_errors.log里找线索。
内容的提问来源于stack exchange,提问作者hasanak naderi

