诡异的too manany connections报错

时间:2023-03-08 19:46:15
诡异的too manany connections报错

问题现象:

应用重启,日志里面报错too manany connections

问题分析:

线上该业务线应用全部重启,一个有38个应用,每个应用3台服务器,每台服务器启动5个链接:

num=38*3*5=570;

570<2048,我们默认的应用最大连接数是2048,怎么会报too manany connections错误。

查看配置文件/etc/my.cnf,确实是max_connections=2028;

登录数据库:

mysql> show variables like '%max%connection%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| max_connections | 214 |
| max_user_connections | 0 |
+----------------------+-------+
2 rows in set (0.00 sec)

神奇的max_connetions 居然成了214,经排查并没有认为修改过该参数值。

[root@mysq-60-103 ~]# ps -ef|grep mysqld_safe
root 2676 1815 0 12:32 pts/0 00:00:00 grep mysqld_safe
mysql 23450 1 0 Oct10 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mysql/data --pid-file=/mysql/data/mysql.pid

查看mysql实例启动进程,是使用mysql用户启动的,而在系统参数配置中,除mysql用户外,其它用户都限制了最大创建连接为1024.因为2048>1024

所以以mysql用户启动mysql实例时,会从默认值214开始分配,以至于max_connetions =214;

[root@mysql-zxzs-60-103 ~]# cat /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

* soft nproc 1024
root soft nproc unlimited

解决方式:

1、以root用户启动mysql实例;

2、向 /etc/security/limits.d/90-nproc.conf文件中追加如下参数:

mysql soft nproc 65535
mysql hard nproc 65535

使配置生效后,再已mysql用户启动mysql实例。