
最近排查一个 PHP 项目时遇到过这种情况:网站平时访问正常,但业务高峰期突然大量接口报错,日志里出现 Too many connections。刚开始以为是服务器性能不够,重启 MySQL 后确实马上恢复,但过一段时间连接数又会慢慢升上去。
后来继续查数据库连接状态,发现问题不是单纯访问量大,而是部分 PHP 脚本执行时间太长。接口里既有数据库查询,又调用了第三方服务,请求外部接口卡住以后,当前 PHP 进程一直没有结束,对应的数据库连接也持续被占用。请求一多,可用连接很快就被耗完。
处理时先把慢接口拆开记录耗时,减少不必要的长事务,并把第三方请求放到数据库操作之外。能提前完成的查询及时结束,耗时任务改成异步处理。同时检查 MySQL 的当前连接、活跃连接和长时间 Sleep 状态,而不是一看到连接满就直接把 max_connections 调得更大。
单纯增加最大连接数只能暂时延后报错,如果 PHP-FPM 进程、慢 SQL、外部接口或者事务问题没有解决,连接迟早还是会继续堆积。
现在遇到 MySQL 连接数突然升高,我一般先看"是谁长期占着连接",再决定要不要调整数据库参数。很多连接数问题,本质上其实是程序执行时间和资源释放方式出了问题。
#PHP开发 #MySQL #数据库优化 #服务器运维