程序异常退出后台,MySQL报错:more than ‘max_user_connections‘ active connections

6 篇文章 0 订阅
3 篇文章 0 订阅
本文讲述了Java应用进程中出现的自动退出问题,通过检查控制台输出发现是由于数据库连接数超出限制。作者详细介绍了如何诊断并解决这个问题,包括查看系统设置、确认连接数、临时和永久修改配置。最后,给出了问题追踪和排查的具体步骤。
摘要由CSDN通过智能技术生成

问题现象:

        突然发现某个应用进程自动退出,重新启动,仍然自动退出,如下图

 感觉莫名其妙,好好的进程突然就自动停止了,查看日志也没有详细的错误信息。

因此使用老办法捕获控制台输出信息,java -jar xxx.jar

看到控制台错误输出:

可以看到异常说明很清楚,单用户的数据库连接数超过了最大限制。

问题解决:

       1、首先查看系统设置的最大连接数

        使用MySQL数据库root权限登录 执行以下SQL

        show variables like'%connections%';

可以看到设置的系统最大连接数为10000,单用户最大为2000(原来是1000,因为不够用,我已经改大了)

     2、查看此时使用的连接数

         使用MySQL数据库root权限登录 执行以下SQL

        SHOW STATUS like '%Threads%';

 

    3、解决连接数不够的问题

        修改连接数大小,执行SQL

        set GLOBAL MAX_CONNECTIONS=10000;  #MySQL运行最大连接数16384

        set GLOBAL MAX_USER_CONNECTIONS=2000;  #一定要大于第二步查到的连接数 

        该调整只是临时改大连接数,重启MySQL会失效,永久修改,编辑配置文件,添加配置

        #vi /etc/my.cnf

        [mysqld]

        max_connections=10000

        max_user_connections=2000

问题追踪:

        因为之前程序都是正常运行的,突然就不行了。应该不是本程序的原因,是由于其他程序使用了同一个MySQL用户,导致数据库连接数超过最大值,可以通过数据库查找具体原因。

使用数据库超管用户登录,执行SQL

SELECT 
USER as login_user,
DB as database_name,
LEFT(HOST,POSITION(':' IN HOST)-1) AS login_ip,
count(1) as conn_num
FROM `information_schema`.`PROCESSLIST` A 
GROUP BY DB,USER,LEFT(HOST,POSITION(':' IN HOST)-1)
ORDER BY COUNT(1) DESC;

查询结果是:用户名|数据库名|连接IP|总连接数

据此可以排查出问题的应用程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值