我用的是redis的pecl客户端,在代码里使用的是connect函数,并且每次请求都手动关闭了连接。但最近iammutex的一个回答提醒了我关注下系统的连接数,于是我在晚上访问量比较小的时候看到如下让我吃惊的结果
`netstat -na | grep 6379 | grep TIME_WAIT | wc -l
446`
在redis端口上居然有446个TIME_WAIT。
我不知道这种情况是否算正常呢?如果不正常,应该优化哪些参数?
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。