事情呢,是这样的。早上突然看到反馈说redis连接异常,就是这个:max number of clients reached。问题很显然就是redis连接数超了,设置一下最大连接数就好了。

1.登录redis服务器,查看下最大连接数

    CONFIG GET maxclients

redis连接错误:ERR max number of clients reached

2. 看下当前连接数

    INFO clients

  redis连接错误:ERR max number of clients reached

    这里的3877是由于停了一小部分程序,减少了redis连接,否则命令行登录时也会显示连接超过最大值

3.既然这个数目不够,那就加呗

    CONFIG set maxclients 8000

你以为这样就可以了?对,我也是这么以为的。然而。。。出现了这个:(error) ERR The operating system is not able to handle the specified number of clients, try with 4064

一通百度+google下来,似乎都说要重启服务设置参数启动,线上重启有点过分了。虽然没能从正面解决问题,但还是给了一些思路。

4.查看系统相关设置

     ulimit -a

redis连接错误:ERR max number of clients reached

这里其实阿里云服务器系统参数默认已经做了优化

5.看一下当前redis进程的进程号

    ps -ef | grep redis

得到进程号为28888

6.至此,我们可以来看一下当前redis进程的相关参数配置描述

    cat /proc/28888/limits

redis连接错误:ERR max number of clients reached

上图中Max open files            4096                 4096                 files 值得引起关注,这个应该就是解决问题的关键

所以有没有办法去动态 改变这个值呢?

7.修改正在运行的进程limits限制

     sudo echo -n 'Max open files=10000:10000' > /proc/28888/limits

     -bash: /proc/20822/limits: Permission denied

???啥情况?不能修改??? 兄dei莫慌,切换到root就可以为所欲为(滑稽)

    切换到root后:

          echo -n 'Max open files=10000:10000' > /proc/28888/limits

          bash: echo: write error: Invalid argument (如果出现了这个,可能是系统内核版本高了,请使用下面一句)

          prlimit --nofile=10000:10000 --pid 28888

8.再瞄一眼redis进程的相关信息

    cat /proc/28888/limits

redis连接错误:ERR max number of clients reached

诶呦~ 不错哦~ 改过来了,目测离成功不远了

9.设置更大的redis client连接数吧,后浪

    CONFIG SET maxclients 9600

redis连接错误:ERR max number of clients reached    

到这里这个问题基本上算是解决了,这也算是当年由于经验不足给自己挖的坑,幸好爬出来了。生产上的配置在初始的时候其实可以避免出现这种问题,不过既然来了,这句话就是多余。。。

 

参考文章:

https://blog.csdn.net/tengxing007/article/details/88354218

https://ask.csdn.net/questions/253239?sort=id

 

相关文章:

  • 2022-02-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-22
  • 2021-10-23
  • 2021-04-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-04
相关资源
相似解决方案