查看redis监控的时候看到redis的graph出现不正常的情况,截图如下:

如上面截图所展示的样子,可以看到redis 的客户端连接数很突兀的上升到10K,又突然下降到0.排除了监控本身的原因,很明显是因为redis本身出了问题。

进入redis服务器,连接上去

/usr/bin/redis-cli -p 6399 -h 127.0.0.1

>127.0.0.1:6399>> info

ERR max number of clients reached

无论执行命令,显示的都是上面的那个错误。这个时候唯一想到的就是redis的客户端已经达到了最大的连接数,无法创建连接了。即redis client可以打开的文件描述符不足

1.获取得到redis:6399这个服务的PID信息

netstat -tunlp | grep 6399

2.获取redis的能够打开的最大文件描述符

cat /proc/PID/limints

可以看上述截图中Max open file这行参数可以看得到进程能够打开的最大文件描述符

3.查看进程打开的文件描述符

方法一:ll /proc/6677/fd | wc -l

方法二:lsof | grep 6399 | wc -l

通过上述方法获取得到的值是10015和10007,可以看得到redis的文件描述符已经使用完毕了。

4.因为redis-cli连接上redis之后无论如何更改出现上面的报错,但是redis server因为是作为缓存使用,不能够随随便便的重启,所以只能在客户端想办法,只能主动让客户端断开连接。所以获取得到6399端口的连接信息:

netstat -tun | grep 6399 | awk '{print $5}' | awk -F':' '{print $1}' | sort | uniq -c

8 10.143.106.95

8 10.143.90.216

5433 10.207.169.67

4788 10.221.236.76

1 10.221.244.39

6 10.225.36.189

在上面的命令可以很明显的获取得到那个IP地址连接redis服务的连接很多

5.进入连接最多的服务器,获得连接redis的客户端信息

netstat -tun | grep 6399

lsof -i:Port

根据上面俩个命令可以获得客户端的应用服务信息

6.获取得到应用服务信息之后,我们和开发商量之后,只能重启才能让客户端主动断开连接。所以直接重启了应用服务。

7.更改redis配置信息。

重启客户端之后,redis的connect也减少了一部分,这个时候可以连接上redis了。

a)获取redis的状态信息

>127.0.0.1:6399>>info

b)获取redis本地配置文件信息,最大连接数,timeout,tcp-keepalive

>127.0.0.1:6399>> config *

>127.0.0.1:6399>> config get maxclients

"10000"

>127.0.0.1:6399>> config get timeout

0

>127.0.0.1:6399>> config get tcp-keepalive

0

c)从上面命令可以看得出,最大连接数是10000,timeout和tcp-keepalive并没有开启,但是又不能重启redis-server,所以只能在线修改配置信息。

>127.0.0.1:6399>> config set maxclients=100000

OK

>127.0.0.1:6399>> config set timeout = 300

OK

做完上面措施之后,客户端连接数也已经断开。

问题产生的原因:

1.zabbix监控获取得到的值为什么是0

zabbix server上面执行

zabbix_get -s 0.0.0.0 -k 'redis[connect client,6399]'

0

原因是因为在agent段redis脚本抓取info信息的时候,对于不是数字类型的数据替换成0,所以导致zabbix 监控获取得到的数值是0

2.为什么有这么多的连接

线上的架构是

client ->VIP->server  #VIP指的是负载均衡

客户端和服务的连接的中间是通过VIP进行转发的,他们直接的通信是TCP/IP四层的通信,在VIP上面本身自己是有做timeout设置的,默认20min ,它会主动的断开连接,但是却没有通知client和server端,导致client和server端并不清楚自己已经断开了连接。但是由于client的代码并没有设置主动断开连接,所以client会认为自己是一直连接的状态,等到下一次它发起请求的时候,VIP会告诉client连接已经断开,client会重新在创建一个新的连接;对于server端来说即redis它本身也没有开启timeout和tcp-keepalive的,所以server端也不会主动的断开连接,所以连接会越来越多,导致连接数完全被使用完。

【转】redis报错“max number of clients reached"的更多相关文章

  1. max number of clients reached Redis测试环境报错

    现象:测试服务是去redis循环取数据,早上发现服务挂了,手动登陆redis 无法输入命令,报错:max number of clients reached Redis

  2. redis cluster 的ERR max number of clients reached 问题排查

    早上发现微服务连不上redis cluster了,看来下日志如下 [root@win-jrh378d7scu 7005]# bin/redis-cli -c -h 15.31.213.183 -p 7 ...

  3. 生产redis client 链接报:ERR max number of clients reached 含义: 达到最大客户端数错误

    1.通过netstat 命令查看TCP又11822个连接  (netstat命令是一个监控TCP/IP网络的非常有用的工具) 2.默认redis最大的连接数10000 ,但是此时无法连接redis客户 ...

  4. mac brew install redis 报错

    mac brew install redis 报错 /usr/local/opt/php55/bin/phpize /usr/local/opt/php55/bin/phpize: line 61: ...

  5. redis报错Windows error 0x70(a large memory)

    redis报错Windows error 0x70 redis 嫌弃你内存不够了,就给你不开第二个实例. The Windows version of Redis allocates a large ...

  6. filebeat output redis 报错 i/o timeout

    filebeat output  redis 报错 i/o timeout 先把报错内容贴出来. ERROR redis/client. go: Failed to RPUSH to redis li ...

  7. window下安装redis报错: creating server tcp listening socket 127.0.0.1:6379: bind No error

    window下安装redis报错: creating server tcp listening socket 127.0.0.1:6379: bind No error 解决: 如果没有配置环境,在安 ...

  8. Redis报错 : (error) NOAUTH Authentication required.

    原文:Redis报错 : (error) NOAUTH Authentication required. 这个错误是因为没有用密码登陆认证 , 先输入密码试试 . 127.0.0.1:6379> ...

  9. Windows安装redis报错处理(转!)

    要谈则谈,要打便打! ---2019.5.9,贸易战 转自:http://www.yayihouse.com/yayishuwu/chapter/1297 安装redis报错信息 [9204] 15 ...

随机推荐

  1. 从linux进程角度看JVM内存模型

    普通进程栈区,在JVM一般仅仅用做线程栈,如下图所示 首先是永久代.永久代本质上是Java程序的代码区和数据区.Java程序中类(class),会被加载到整个区域的不同数据结构中去,包括常量池.域.方 ...

  2. JAVA设计模式之工厂模式—Factory Pattern

    1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...

  3. NUCLEO-8L152开发板中文应用笔记整理集合

    [AN5182]基于Adafruit TFT Shield与STM8 Nucleo-64板的图片查看器:https://www.yiboard.com/thread-962-1-1.html 本应用笔 ...

  4. LeetCode - 24、两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2-> ...

  5. Kotlin注解深入解析与实例剖析

    在上一次https://www.cnblogs.com/webor2006/p/11522798.html中学习了Kotlin注解相关的东东,这次继续对Kotlin的注解继续学习: 注解也可以拥有自己 ...

  6. webpack-dev-server 本地代理proxy

    proxy: [ { context: ['/user', '/rights', '/resource/getAdNotice'], target: 'https://plus.m.jd.com', ...

  7. python打造seo必备工具-自动查询排名

    因为工作需要,利用业余时间开发的,可以查询百度排名+360排名工具,附上代码. #360搜索排名查询 # -*- coding=utf-8 -*- import requests from lxml ...

  8. 视觉跟踪:MDnet

    应用需注明原创! 深度学习在2015年中左右基本已经占据了计算机视觉领域中大部分分支,如图像分类.物体检测等等,但迟迟没有视觉跟踪工作公布,2015年底便出现了一篇叫MDNet的论文,致力于用神经网络 ...

  9. ESP8266 tcp透传AP+STA

    AP 建立WIFI,接受STA连接,串口数据和TCP互传 #include <ESP8266WiFi.h> const char *ssid = "esp8266_666&quo ...

  10. If...else 条件判断和If else嵌套

    If(条件表达式){ 如果条件表达式结果为true,执行该处代码. 如果条件表达式结果为false,执行下边代码. }else{ 如果条件表达式结果为false,执行该处代码. } If(条件表达式) ...