后端服务崩溃导致502?如何检查PHP或数据库进程状态?
502 Bad Gateway 通常发生在以下场景:
关键指标
风险点
阈值参考
- PHP-FPM/Nginx进程崩溃或无响应
- 数据库连接耗尽或崩溃
- 服务器资源(CPU/内存)耗尽
- 间歇性出现502错误
- 服务完全不可用
- 伴随服务器负载飙升
检查步骤
1. PHP进程状态检查
bash
# 查看PHP-FPM进程是否存活 ps aux | grep php-fpm # 检查PHP-FPM错误日志(路径可能不同) tail -n 50 /var/log/php-fpm.log
- 进程是否存在(至少应有master+worker进程)
- 日志中是否有
WARNING: [pool www] seems busy
等资源不足提示
2. 数据库状态检查
bash
# MySQL状态(需权限) systemctl status mysql # 或 service mysql status mysqladmin -uroot -p ping # 测试数据库响应 # 查看连接数 mysql -uroot -p -e "SHOW STATUS LIKE 'Threads_connected';"
- 连接数接近
max_connections
值时会出现拒绝连接 - 锁等待超时可能导致雪崩
3. 服务器资源检查
bash
top # 实时资源占用 free -h # 内存余量 df -h # 磁盘空间
- CPU持续>80%
- 内存剩余<10%
- 磁盘空间<5%
应急恢复方案
操作 | 命令/方法 | 适用场景 |
---|---|---|
重启PHP服务 | systemctl restart php-fpm |
进程僵死但资源充足时 |
重启数据库 | systemctl restart mysql |
数据库无响应且可接受短暂中断 |
限流保护 | Nginx速率限制或降级策略 | 突发流量导致资源耗尽 |
根治建议
- 进程监控:部署Supervisor或k8s健康检查
- 日志分析:ELK收集PHP/DB/Nginx错误日志
- 压力测试:提前用JMeter模拟高并发场景
📌 生产环境特别注意
- 避免直接重启数据库(可能引发数据损坏)
- 502期间保留现场信息(如
strace -p <PID>
)
更新时间:2025-06-02 14:11:21