这两天,公司的项目刚刚上线,用户量也是一点点的多了起来,各种bug也是一个个的冒了出来,我负责的后台web服务器也难以幸免,终究还是经验太少,导致有些问题没能及早预料到。

今天早上,公司的web服务器崩溃了,登上后台查了下日志,看到了异常信息如下:


2015-09-14 10:56:09 [ERROR] - com.zkyj.core.dao.impl.CourseDaoImpl -GeneralDao.java(76) 
-GeneralDao getEntityList has failed!org.springframework.jdbc.CannotGetJdbcConnectionException: 
Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:
 Server connection failure during transaction. Due to underlying exception: 
'com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: 
Data source rejected establishment of connection,  message from server: "Too many connections"'.

** BEGIN NESTED EXCEPTION ** 

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

STACKTRACE:

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

各种百度后:

1.首先定位了问题,是由于访问量太大,导致数据库连接数不够,问题出现在数据库上

2.查找解决方案修改mysql的配置文件my.cnf,调整最大连接数max_connections

3.重启mysql,重新部署tomcat 当这些操作完成后,恩恩,心里挺美的,总算解决了个大问题

--------------------------------------------------------------------

但悲剧的是下午服务器又一次崩溃了

还是这个问题导致的崩溃,我就纳闷了。

于是各种查,当时无法用客户端工具连接mysql,也无法在终端命令行(mysql uroot p****)登录

无奈,只能先把tomcat停了,然后在终端命令行登录上去。


//登录mysql
root@AY14061309211937343aZ:~# mysql -uroot -p***
//查看数据库最大连接数的配置
mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
//设置最大连接数
//注:上午不是用命令行,而是修改了配置文件my.cnf
mysql> set GLOBAL max_connections=2000;
//查看最大连接数配置后,已经设置完毕,这下就成功了
mysql> show variables like '%max_connections%';       
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 2000  |
+-----------------+-------+
1 row in set (0.00 sec)

后来我才发现上午操作失败的原因:

我当时百度后,有的文章提示直接在my.cnf文件最底端加入:

max_connections=2000

这行配置即可,但是这样其实是错误的,应该修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:

max_connections=2000

---------------- ------------------------------------------

注:

备注一些常用的mysql状态命令参数

mysql> show status like 'Threads%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 58    |
| Threads_connected | 57    |   ###这个数值指的是打开的连接数
| Threads_created   | 3676  |
| Threads_running   | 4     |   ###这个数值指的是激活的连接数,这个数值一般远低于connected数值
+-------------------+-------+


------------------------------------------------------------------------------------------------------

mysql> show status like '%Max_used_connections%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 30    |
+----------------------+-------+
1 row in set (0.00 sec)

Max_used_connections 同时使用的连接的最大数目。

Threads_connected 当前打开的连接的数量。
Threads_running 不在睡眠的线程数量。


(转载本站原创文章请注明作者与出处Coding云--codingyun.com)

打赏
  • 微信
  • 支付宝

评论
来发评论吧~