Mysql Too many connections问题解决办法

今天同事发了如下错误信息出来,服务启动时报的,这是一个开发库,使用的成员并不多,我刚开始还在想是不是程序处理或者配置有问题:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"

异常信息是说当前已超出数据库最大连接数,MySQL服务器所支持的最大连接数是有上限的。

1.使用show PROCESSLIST查看当前的进程数为152个,且发现大量的Sleep进程;如果是Sleep进程占大多数,那么没有必要加大最大连接数,因为每个连接的建立都会消耗内存,没必要增加多余开销

2.执行show variables like '%max_connections%',查看最大连接数为150,这个是Mysql默认配置

3.再看看当前空闲连接等待时长,也是默认的28800s,也就是8个小时。。这个wait_timeout的作用是,设置非交互连接(就是指那些连接池方式、非客户端方式连接的)的超时时间,默认是28800,就是8小时,超过这个时间,mysql服务器会主动切断那些已经连接的,但是状态是sleep的连接。问题就是这里

 Mysql> show variables like “%timeout%”;

+-----------------------------+----------+
| Variable_name              | Value    |
+-----------------------------+----------+
| connect_timeout            | 10      |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50      |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout        | 28800    |
| lock_wait_timeout          | 31536000 |
| net_read_timeout            | 30      |
| net_write_timeout          | 60      |
| slave_net_timeout          | 3600    |
| wait_timeout                | 28800    |
+-----------------------------+----------+

4.修改这个等待超时时长,我们设置为120秒,问题就解决了

mysql> set global wait_timeout=120;
Query OK, 0 rows affected (0.00 sec)

 

当然,如果服务器访问量确实很大,进程列表里不是Sleep进程占大多数,就要考虑设置一个合适的max_connections来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值