redis网络诊断

来源:互联网 发布:python cipher aescbc 编辑:程序博客网 时间:2024/05/22 12:09

hhvm频繁告警,iostat正常,vmstat正常,实在是想不出什么地方出问题了。经过诊断是网络出现了问题,出现了大量TIME_WAIT和CLOSE_WAIT,

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'


echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

原理:redis的客户端close一个链接以后,这个链接就会进入TIME_WAIT状态,而TIME_WAIT状态的链接会在Max Segment Lifetime内都没有活跃包的情况下关掉。Linux这个默认值貌似很长,具体的数值还真不知道,似乎是分钟级的。。。
悲剧的是,一条TCP链接是死是活由源IP和端口,目标IP和端口四个变量决定。那客户端和服务器的这四个值都是固定的,所以每次建立新链接的同时,处在TIME_WAIT的链接也被告知,你还不能死。所以执行上述命令,让tw状态的链接可以reuse

补充:/proc/sys/net/ipv4/tcp_tw_recycle 如果设成1的话,就是快速回收tw链接,应该也能解决问题

http://segmentfault.com/q/1010000000095255 为何redis的TIME_WAIT值如此之高

http://blog.csdn.net/shootyou/article/details/6622226  再谈应用环境下的TIME_WAIT和CLOSE_WAIT


0 0
原创粉丝点击