电脑课堂
柔彩主题三 · 更轻盈的阅读体验

连接池最小空闲连接数设置不当,网站卡成幻灯片?

发布时间:2025-12-15 19:11:21 阅读:485 次

公司内部系统早上一上班就卡得不行,用户刷新半天进不去,等个三五秒是常态。运维同事一通排查,CPU、内存、网络都没问题,最后发现罪魁祸首竟是数据库连接里的“最小空闲连接数”被设成了0。

啥是最小空闲连接数?

很多人知道数据库连接池能复用连接,避免频繁创建销毁带来的开销,但对里面的参数不太上心。其中“最小空闲连接数”就是池子里始终保留的“待命”连接数量。比如你设成5,哪怕系统没请求,池子也会维持至少5个连接连着数据库,随时准备接活。

这个值设成0,听起来省资源——没人用就断开呗。可现实是,每天早上八点半,几百人同时打开电脑登录系统,瞬间涌来大量请求。连接池发现没现成连接,只能临时一个一个去建。建连接要握手、认证、分配资源,每个都得几十甚至上百毫秒。几百个请求排队等连接,系统自然卡成幻灯片。

怎么定这个数?看业务节奏

别照抄别人配置。如果你的系统有明显高峰期,比如电商平台的秒杀、公司系统的上班打卡时段,最小空闲连接数就得覆盖住这个“启动冲击”。可以先拿生产环境的平均并发查一下:

/* 查看当前活跃连接数参考 */
SHOW STATUS LIKE 'Threads_connected';

假设平时空闲时只有10个连接,早高峰一下子跳到120。那最小空闲数设成10就不够看。建议设成平峰期的70%~80%,比如平时50个连接,最小空闲可以设30~40,让系统“热启动”,别每次都从零开始。

也别设太高,小心反向拖累

有人一听,干脆设成100得了,永远不缺。可数据库的连接数是有限的,MySQL 默认一般151,调太高可能把数据库的连接名额占满,其他服务连不上。而且每个连接都占内存,一万个小水管看着不占地方,真铺开能把服务器拖慢。

合理做法是结合最大连接数一起调。比如最大设100,最小空闲设20~30,留出弹性空间。Spring Boot 项目里常见配置长这样:

spring.datasource.hikari.minimum-idle=20
spring.datasource.hikari.maximum-pool-size=100

改完配置别忘了观察几天监控。如果发现空闲连接长期接近最小值,说明设低了;如果一直远高于最小值,可能可以再压一压。调得好,系统响应快,数据库也轻松。