redis链接数剧增排查原因过程
应用报reids 连接错误,read error on connection 报错
1、首先查看redis链接数
在redis服务器上 使用命令 info clients
查看是否设置 redis 连接超时时长 config get timeout
这里已经将超时时长设置为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]}'
1、LISTENING 侦听状态
2、ESTABLISHED 建立连接状态,表示两台机器正在通信。
3、FIN_WAIT1 套字节已关闭,发送远程关闭连接
4、FIN_WAIT2 套字节已关闭,等待远程套字节关闭
5、CLOSE_WAIT 正常关闭状态,对方主动关闭连接或者网络异常导致连接中断。
6、TIME_WAIT 我方主动断开连接,收到对方确认。
统计下当前redis服务器上有效链接数据分别有哪些,使用命令
netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
重点关注几个有效链接数较高的应用服务器和代码
最后 检查tomcat配置发现cnotallow="20000"的时候acceptCount=“100”,明显不合理
优化tomcat配置,重启应用
connectionTimeout="20000" 改为 connectionTimeout="2000"
acceptCount="100"改为acceptCount="3000"