这两天,公司的项目刚刚上线,用户量也是一点点的多了起来,各种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状态命令参数
+-------------------+-------+
| 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)