Java微服务连接同个MySQL实例报错“Too many connections”

30 阅读1分钟

多个微服务连接同个Mysql实例,结合数据库本身的连接池,就容易报错 Too many connections

即当前所有可用的连接都已被使用,新的客户端连接无法建立。

首先你要看两点:

(1)SHOW VARIABLES LIKE 'max_connections';

(2)有多少微服务节点以及每个微服务节点数据库连接池的最大连接数。

首先我拿我的项目举例,我是4核8G的服务器。

SHOW VARIABLES LIKE 'max_connections'; -- 结果为151

我有8个微服务,每个微服务的druid连接池的max-active(最大连接数)是50。

那么这就有很大问题了,如果我并发很高,8个微服务 * 50最大连接数就是400,而我MySQL数据库设定的max_connections是151,那肯定会报错Too many connections了。

解决办法就是设置max_connections的值高一些,比如刚才算出我们项目最大并发连接数是400,那我这里设置max_connections为500比较好,当然这个数还不完全对,因为要看你的业务,只改max_connections不改max-active也是不行的,再一个也要看你服务器的配置,所以说,架构调优很多时候没有绝对正确的答案,要看你的实际情况。