错误原因
java.sql.SQLException: Cannot create PoolableConnectionFactory (Data source rejected establishment of connection, message from server: "Too many connections")
修改mysql的my.ini配置文件,网上的说法:mysql安装目录下的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满。
而项目实际上部署在linux系统上,需要找到my.cnf的配置文件,一般在etc/my.cnf,找到这个文件,[mysqld]下添加如下行:
max_connections=1000
max_user_connections=500wait_timeout = 28800
interactive-timeout = 28800
之后重启mysql,生效。
1、使用 service 启动:
service mysqld restart
service mysql restart (5.5.7版本命令)
2、使用 mysqld 脚本启动:
/etc/init.d/mysqld restart
max_connections: 为设置最大的连接数
max_user_connections:设置每用户最大的 连接数500
wait_timeout:表示200秒后将关闭空闲连接,但对正在工作的连接不受影响。
查看连接数是否被修改
show variables like '%connection%'
max_connections代表允许连接数据库的所有用户的连接数总和,是对整个服务器的用户限制,整个服务器只能开这么多session,而不考虑用户!
max_user_connections限制每个用户的session连接个数,每个用户都可以连接,但是连接只能这么大值(用户数指root)
查看服务器线程数
show global status like 'Thread%';
thread_cached :代表mysql管理的线程池中还有多少可以被复用的资源
Threads_connected : 当前打开的连接的数量。(和show processlist一致)
thread_created : 代表新创建的thread(根据官方文档,如果thread_created增大迅速,需要适当调高thread_cache_size)
thread_running :代表真正在运行的(等于1一般就是这个show status命令本身)
mysql建立连接非常消耗资源,所以就有了thread_cache,当已有连接不再使用之后,mysql server不是直接断开连接,而是将已有连接转入到thread_cache中,以便下次在有create thread的需求时,可以在cache中复用,提高性能,降低资源消耗。
当然,如果已经有了中间件或者其他的连接池管理,那么这个参数就没有那么重要了,但是如果没有其他的连接池管理,那么优化这个参数还是可以得到不错的回报的。
所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。
show full processlist;