最近因为redis服务的利用率越来越高,于是对redis的监控也更加细致上来。

但是昨天发现有一台机器上的连接的client都是几个月前做的备用网络的client,而这些client居然居然一直都没有断。

redis1

 

而10.2这个网段也关了快3个月了,怎么上面还有连接呢。首先感觉是tcp的问题,不会是ESTABLISHED的时间设置的太长了吧。于是用systcl看了下,可也很正常啊。默认记得是2天,我初始化一般都是5分钟的。可这都几个月了也不太正常啊。

redis-tcp-timeout

 

于是想到直接给这些ESTABLISHED连接发送RST信号。找了2个工具cutter和tcpkill, 可也都没有效果。

redis-cutter

 

redis2

 

搞了半天发现redis的连接数还是这样啊,一点都没有减少啊。那在ip conntrack表里总能找到吧,结果一样是没有。

redis3

 

于是想到这个应该是redis自己的问题,因为我记得只有到了2.6以后的版本redis才有了tcp timeout这样的设置,而我们最早这批redis还是2.4 版本的,自然没有这些控制。 于是用redis-cli进去查,果然通过client list就把那些10.2.x.x的IP和端口都列出来了,然后写了个shell就用client kill全给灭了。

 

虽然是都灭了,用netstat -an查看也正常了。 可这个算是tcp连接假死吗?  这个还不追查了,尽快升级版本吧。

Share Your Thought