页面假死主因是数据库连接池耗尽,php线程卡在getconnection()导致fpm worker全阻塞;需交叉验证nginx日志(upstream timeout/no live upstreams)、php-fpm状态(active=max_children、slow上升、idle≈0)、应用线程堆栈(java查jstack、php启慢日志)、mysql连接数(threads_connected接近max_connections)及连接泄漏。

页面假死但 Nginx 和 PHP-FPM 进程都“活着”,往往不是代码卡住,而是后端被数据库拖住——连接池耗尽后,PHP 线程在 getConnection() 上无限等待,导致 FPM worker 全部阻塞,新请求排队超时,最终表现为页面加载极慢或 504。排查要从 Nginx 日志、PHP-FPM 状态、Java/PHP 应用层堆栈、数据库连接数四点交叉验证。
看 Nginx error.log 是否集中出现 upstream 超时
Nginx 不连数据库,但它会暴露后端卡顿的信号:
-
[error] ... upstream timed out (110: Connection timed out) while reading response header from upstream—— 表明 PHP-FPM 已返回不了 HTTP 响应,极可能卡在等 DB 连接 -
[error] ... no live upstreams while connecting to upstream—— 所有 PHP-FPM worker 都不可用(非崩溃,而是全在 WAITING 状态) - 短时间内大量
502 Bad Gateway或504 Gateway Timeout,且时间戳高度重合,说明服务雪崩起点已出现
查 PHP-FPM 状态和进程行为
别只看进程是否存在,要看它是否真在干活:
- 执行
sudo systemctl status php-fpm或ps aux | grep 'php-fpm:',确认active processes是否长期等于pm.max_children - 开启 FPM 状态页(需配置
pm.status_path = /status),运行:curl http://127.0.0.1/status?full | grep -E "(active|slow|idle)"
若active processes满、slow requests持续上涨、idle processes接近 0,就是典型的“假死”前兆 - 用
top -p $(pgrep php-fpm | tr '\n' ',' | sed 's/,$//')观察 CPU:若 us 很低但 sy 或 wa 很高,说明线程在内核态等待 I/O(比如 DB 连接)
抓 Java/PHP 应用线程快照,确认是否卡在 getConnection
这是最关键的一步,直接定位阻塞源头:
- Java 应用:用
jstack <pid></pid>,搜索关键词:DataSource.getConnection、HikariPool.getConnection、await、park、TIMED_WAITING
若几十个线程堆栈都停在这行,基本实锤连接池已满 - PHP 应用(如 Laravel + PDO):启用慢日志 + 查询计数埋点
在关键接口末尾加:echo "DB queries: " . DB::getQueryLog() ? count(DB::getQueryLog()) : 0;
若单次请求执行上百条查询,大概率是 N+1;若某接口稳定执行 1 条但响应极慢,重点查这条 SQL 是否锁表或没走索引
验证数据库连接池与 MySQL 实际负载
连接池满 ≠ MySQL 连接数满,但二者常联动:
- 登录 MySQL,执行:
SHOW STATUS LIKE 'Threads_connected';—— 查当前活跃连接数SHOW VARIABLES LIKE 'max_connections';—— 查上限
若两者接近,再执行SHOW PROCESSLIST;,观察是否有大量Sleep状态连接未释放(泄漏)或长时间Query(慢 SQL) - 检查应用端连接池运行时指标:
HikariCP:通过 JMX 查getActiveConnections()、getThreadsAwaitingConnection();
Druid:访问/druid/index.html或查 JMX 中ActiveCount和WaitThreadCount - 开启连接泄漏检测(如 Hikari 的
leak-detection-threshold=60000),日志中一旦出现泄漏堆栈,立刻修复未关闭的Connection/ResultSet
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











