在一次启动项目的过程中报了如下一个错误信息:
[ERROR] [2019-03-20 13:14:43] com.alibaba.druid.pool.DruidDataSource.init(629) | init datasource error
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.Util.getInstance(Util.java:383)
意思是说链接太多了,分析下会出现这种情况的原因:
1.查看代码,是否在获取数据库连接,访问完数据库之后没有及时关闭数据库连接,释放资源
2.查看连接进程结束时间 wait_timeout — 指的是mysql在关闭一个非交互的连接之前所要等待的秒数
如果你没有修改过MySQL的配置,wait_timeout的初始值是28800
wait_timeout 过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题
3.看数据库的连接数设置,Mysql默认是100,以及增大数据库最大连接数
SHOW VARIABLES LIKE '%max_con%';
修改:(一般设置范围在500-1000之间)
SET GLOBAL max_connections = 1000;
可在MySQL配置文件my.ini直接找到对应的连接数max_connections和等待时间wait_timeout直接修改
Q群【308742428】大家一起讨论技术。
后面会不定时为大家更新文章,敬请期待。