Laravel应用中Artisan命令与路由响应异常缓慢的排查求助
Laravel生产环境卡顿排查建议
系统资源实时监控
- 执行
top或htop,重点观察:- CPU占用:是否有单个/多个进程长期占满CPU核心
- 内存与Swap:Swap使用率是否过高(>50%),内存是否耗尽触发OOM killer
- 磁盘IO:
%CPU列的wa值是否长期高于20%(表示磁盘等待严重)
- 用
iostat -x 1查看磁盘读写详情,确认%util是否接近100%,排查磁盘瓶颈或异常读写操作 - 执行
ss -tulpn检查网络连接,查看是否有大量TIME_WAIT连接堆积,或异常端口占用
PHP-FPM进程排查
- 查看PHP-FPM状态页(需提前配置),检查
active processes是否达到pm.max_children上限,queue请求数是否过高 - 查看PHP-FPM日志(默认路径:
/var/log/php-fpm/),排查是否有进程崩溃、内存溢出、超时等报错 - 临时调整PHP-FPM参数:适当提高
pm.max_children(按内存计算,建议每个进程预留50-100MB内存),降低pm.process_idle_timeout,测试是否缓解卡顿(生产环境调整前需备份配置)
Laravel应用深层排查
- 临时开启Laravel debug日志:修改
.env中LOG_LEVEL=debug,查看storage/logs/laravel.log,定位请求执行中耗时最长的环节(如慢查询、外部API调用、队列阻塞) - 测试Artisan基础命令耗时:执行
php artisan route:list或php artisan tinker执行简单DB查询,对比正常耗时,排查Artisan本身是否异常 - 检查队列任务堆积:执行
php artisan queue:monitor(或数据库队列直接查jobs表),若队列堆积,优先处理阻塞任务或临时扩容队列进程 - 排查定时任务:查看Cron配置(
crontab -l),确认是否有批量数据处理、备份等任务在高峰期执行,占用系统资源 - 确认
APP_DEBUG是否关闭:生产环境开启debug会大幅增加IO和CPU消耗,必须设置为false - 验证缓存驱动状态:若使用Redis/Memcached,执行
php artisan cache:clear后测试缓存读写,或临时切换为文件缓存(CACHE_DRIVER=file)排查缓存服务问题
文件系统与权限排查
- 执行
df -h检查磁盘剩余空间,确认120GB存储是否剩余不足(剩余<10%可能导致写入阻塞) - 检查Laravel存储目录权限:确保
storage/、bootstrap/cache/目录权限为755,所属用户与Web/PHP进程一致 - 清理大日志文件:若
laravel.log或系统日志超过1GB,备份后清空,避免大文件读写拖慢进程
RDS数据库深层排查
- 查看RDS慢查询日志:排查是否有新增的无索引查询、大表全表扫描等慢SQL,及时优化或添加索引
- 查看RDS监控指标:确认CPU、内存、连接数是否达到实例上限,是否有突发的连接高峰
- 测试EC2到RDS的网络延迟:执行
ping <RDS_ENDPOINT>或traceroute <RDS_ENDPOINT>,确认延迟是否突然升高(正常应<50ms)
其他应急排查点
- 滚动重启PHP-FPM与Web服务器:执行
systemctl reload php-fpm、systemctl reload nginx,避免进程僵死导致的卡顿 - 检查EC2系统更新:查看
/var/log/yum.log或/var/log/apt/history.log,确认是否有自动系统更新占用资源 - 排查恶意进程:执行
ps aux --sort=-%cpu,查看是否有陌生进程长期占用CPU(如挖矿程序) - 负载均衡环境检查:若使用ELB,确认是否有单个EC2节点负载过高,临时移除异常节点测试
内容的提问来源于stack exchange,提问作者Mohanned Zbeda
相关产品推荐
相关产品推荐

