
「Too many connections」这个报错,做网站的人迟早会碰到。数据库连接数满了,网站直接白屏,报错日志里全是这个提示。2026年我处理过好几起,这篇讲清楚排查思路和解决办法。
第一步先看当前连接数。登录服务器执行SHOW STATUS LIKE 'Threads_connected',看实际连接数;再看SHOW VARIABLES LIKE 'max_connections',看上限。如果实际连接数长期贴着上限,说明连接池或应用层有问题,光调大参数治标不治本。
第二步找连接来源。执行SHOW PROCESSLIST,能看到每个连接的来源IP、执行的SQL、状态。重点看两类:State是Sleep的闲置连接占了多少,这类连接占着名额不干活;State是Query但SQL跑了很久的,就是慢查询在拖后腿。
第三步对症下药。闲置连接多,说明应用层连接池配置不对,PHP的pconnect、Java的HikariCP、Python的SQLAlchemy都要设置最大连接数和超时时间,别让连接只增不减。慢查询多,用慢查询日志定位SQL,加索引、改写法,一条大SQL优化好了,可能释放几十个连接。
参数调优放在最后。max_connections从默认的151调到500甚至1000,要同时看服务器的内存够不够,每个连接大约占用几MB内存,连接数翻倍内存也要跟着涨。宝塔面板的MySQL配置里可以直接改,改完重启生效。
还有一个高频原因:程序里有连接泄漏,每次请求都new一个连接但不关闭。这种问题调大参数也没用,迟早再爆。排查方法是在代码里搜数据库连接相关的类,确认有没有在finally或defer里释放。
最后给个预防建议:监控工具(宝塔的监控、Uptime Kuma都行)把连接数加进告警,超过80%就通知。等报错出现再处理,用户已经流失一批了。
还木有评论哦,快来抢沙发吧~