在一次启动项目的过程中报了如下一个错误信息:

[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】大家一起讨论技术。

后面会不定时为大家更新文章,敬请期待。