抛出问题
最近测试环境突然出现了too many connections的mysql异常抛出,当然这是连接数过多没有释放导致的。查看问题,首先连接上mysql服务器。
问题分析
运行语句SHOW PROCESSLIST
查看当前连接进程,
运行语句show global variables like 'max_conne%'
查看最大连接数限制多少条。
基本就可以定位到问题了,当前连接进程跟最大连接数基本持平,导致大量新的连接建立失败。
废话不多说,下面说解决方案吧,有两个方向去修改。
解决问题
- 客户端
这一部分可能需要修改业务代码,在客户端连接获取完数据后及时关闭数据库连接,这样就可以防止连接数过多。
- 服务端
mysql服务端修改的话,有两种配置,一种是增加最大连接数,修改max_connections
参数,或者修改连接断开的时间限制参数,这样的话可以让一些sleep的连接回收。这种解决方式是修改wait_timeout
参数,修改为你觉得业务合适的时间区间就好了。
另外,还有个interactive_timeout
参数,这个参数与wait_timeout
的区别是客户端的交互模式。一般程序连接的为非交互模式,修改wait_timeout
参数就好了。
⚠️timeout参数修改时需要注意客户端连接池的丢失连接问题