数据库链接出现
too many connections
经各方查阅谈几点看法,各方资料出现这个原因是MySQL设置的连接数超了。导致新的链接无法连接。MySQL 默认 100个连接数,程序连接池初始化数是10个。后端程序启动多了会有这个问题。
极速解决办法,立刻重启数据库,释放掉部分链接。
- 修改MySQL数据库连接数,查看当前大小使用
show variables like "max_connections";
// 当前生效
set GLOBAL max_connections=1000;
或者 修改MySQL配置文件/etc/my.ini
增加配置,重启服务。
max_connections=1000;
- 分析MySQL当前链接进程,
show processlist;
image.png
大部分链接处于sleep
状态,继续查阅会找到与Mysql两个属性wait_timeout
与interactive_timeout
有关,网上建议修改这两个参数,这两个参数默认值都是8小时,这两个属性官方释义为:- interactive_timeout:
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时) - (2)wait_timeout:
参数含义:服务器关闭非交互连接之前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时)
- interactive_timeout:
个人看法:
后台程序连接池初始化10个,程序启动后会与MySQL服务建立TCP链接,TCP链接特点是一对一双方共同建立的联系。MySQL对于连接池中10个链接默认保持8小时,如果Java端不中断链接8小时内是有效的。如果超过8小时有效时间,Mysql 服务也就强制端口链接,此时链接无效。但仍存在于Java段连接池中,此时后端程序仍使用此链接时,不进行连接的有效检查,此链接是null
就会产生异常。所以不建议将修改MySQLwait_timeout
改小。
网友评论