您的位置:首页 > 理论基础 > 计算机网络

redis网络诊断

2015-04-09 19:19 218 查看
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  href="http://segmentfault.com/q/1010000000095255" target=_blank>为何redis的TIME_WAIT值如此之高
http://blog.csdn.net/shootyou/article/details/6622226  再谈应用环境下的TIME_WAIT和CLOSE_WAIT
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: