【转】redis报错“max number of clients reached"
查看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"的更多相关文章
- max number of clients reached Redis测试环境报错
现象:测试服务是去redis循环取数据,早上发现服务挂了,手动登陆redis 无法输入命令,报错:max number of clients reached Redis
- 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 ...
- 生产redis client 链接报:ERR max number of clients reached 含义: 达到最大客户端数错误
1.通过netstat 命令查看TCP又11822个连接 (netstat命令是一个监控TCP/IP网络的非常有用的工具) 2.默认redis最大的连接数10000 ,但是此时无法连接redis客户 ...
- mac brew install redis 报错
mac brew install redis 报错 /usr/local/opt/php55/bin/phpize /usr/local/opt/php55/bin/phpize: line 61: ...
- redis报错Windows error 0x70(a large memory)
redis报错Windows error 0x70 redis 嫌弃你内存不够了,就给你不开第二个实例. The Windows version of Redis allocates a large ...
- filebeat output redis 报错 i/o timeout
filebeat output redis 报错 i/o timeout 先把报错内容贴出来. ERROR redis/client. go: Failed to RPUSH to redis li ...
- 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 解决: 如果没有配置环境,在安 ...
- Redis报错 : (error) NOAUTH Authentication required.
原文:Redis报错 : (error) NOAUTH Authentication required. 这个错误是因为没有用密码登陆认证 , 先输入密码试试 . 127.0.0.1:6379> ...
- Windows安装redis报错处理(转!)
要谈则谈,要打便打! ---2019.5.9,贸易战 转自:http://www.yayihouse.com/yayishuwu/chapter/1297 安装redis报错信息 [9204] 15 ...
随机推荐
- 使用 chroot 建立沙盒环境
使用 chroot 建立沙盒环境 chroot 提供了更改当前进程及其子进程的可见根目录的操作,运行在此隔离环境中的应用程序无法访问新的目录树之外的文件和命令.这样的隔离环境称作 chroot 监狱( ...
- IDEA如何配置tomcat及建一个web项目
需求:项目工程可能别人已经建好了,我需要把项目导入到自己的IDEA并配置tomcat运行; 准备工作:1.本地的tomat服务器 2.IDEA工具 3.JDK 步骤: 1.点击Run -> Ed ...
- PAT甲级1012题解——选择一种合适数据存储方式能使题目变得更简单
题目分析: 本题的算法并不复杂,主要是要搞清楚数据的存储方式(选择一种合适的方式存储每个学生的四个成绩很重要)这里由于N的范围为10^6,故选择结构体来存放对应下标为学生的id(N只有2000的范围, ...
- HDU-4544 湫湫系列故事——消灭兔子 (贪心+优先队列)
题目思路 将兔子的血量从大到小排列,将箭的属性写在类中(结构体也成),排序按照伤害从大到小排列,若有相等的则按价格从小到大排. 代码 #include<bits/stdc++.h> usi ...
- docker镜像里的tag那些事--alpine,slim,stretch,jessie
https://stackoverflow.com/questions/54954187/docker-images-types-slim-vs-slim-stretch-vs-stretch-vs- ...
- The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple (Mirror)
B题 思路 因为 \[ x=\sum\limits_{k=1}^{n}ka_k\\ y=\sum\limits_{k=1}^{n}ka_{k}^{2} \] 我们设交换前和交换后的这两个等式的值设为\ ...
- python iter()函数迭代器
迭代器为类序列对象提供了一个类序列的接口.python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象.迭代器用起来很灵巧,你可以迭代不是序列但表现处序列行为的对象,例如 ...
- wordpress调用自定义菜单
wordpress要调用自定义菜单首先要注册菜单,将代码添加到主题文件夹下的function.php中,比如wordpress自带主题2019的定义如下 // This theme uses wp_n ...
- C#中ref和out的原理
去年在CSDN上写的,现在把它搬过来. 一.引发问题 用了那么久的 ref 和 out ,你真的了解它们是如何使得实参与形参的值保持同步的吗? 二.研究前提 要研究这个问题,前提是要了解 C# 中方法 ...
- python - django 执行数据库迁移后数据库并未更新 和 InternalError: (1054, u"Unknown column 'xxx' in 'field list'")问题
一.发生情况:当你修改数据库结构后进行 python manage.py makemigrations 和 python manage.py migrate 后发现控制台会给你返回一个下面的结果,但是 ...