redis链接数剧增排查原因过程

应用报reids 连接错误,read error on connection 报错

1、首先查看redis链接数

在redis服务器上 使用命令 info clients

redis允许连接数 redis 连接数_数据库


查看是否设置 redis 连接超时时长 config get timeout

redis允许连接数 redis 连接数_缓存_02


这里已经将超时时长设置为6秒,非常短了,一般可设置为 30,60 ;config set timeout 30

网上基本是设置时长就能解决问题,我这里已经是6 还有2000多的链接数,进一步排查

查看redis 服务器上的 tcp 连接状态

$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

redis允许连接数 redis 连接数_数据库_03

1、LISTENING 侦听状态
2、ESTABLISHED 建立连接状态,表示两台机器正在通信。
3、FIN_WAIT1 套字节已关闭,发送远程关闭连接
4、FIN_WAIT2 套字节已关闭,等待远程套字节关闭
5、CLOSE_WAIT 正常关闭状态,对方主动关闭连接或者网络异常导致连接中断。
6、TIME_WAIT 我方主动断开连接,收到对方确认。

redis允许连接数 redis 连接数_缓存_04

统计下当前redis服务器上有效链接数据分别有哪些,使用命令

netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn

redis允许连接数 redis 连接数_服务器_05


重点关注几个有效链接数较高的应用服务器和代码

最后 检查tomcat配置发现cnotallow="20000"的时候acceptCount=“100”,明显不合理

redis允许连接数 redis 连接数_redis允许连接数_06

优化tomcat配置,重启应用

connectionTimeout="20000" 改为 connectionTimeout="2000"
acceptCount="100"改为acceptCount="3000"