开发者社区> 问答> 正文

为什么redis的TIME_WAIT值这么高?

我用的是redis的pecl客户端,在代码里使用的是connect函数,并且每次请求都手动关闭了连接。但最近iammutex的一个回答提醒了我关注下系统的连接数,于是我在晚上访问量比较小的时候看到如下让我吃惊的结果
`netstat -na | grep 6379 | grep TIME_WAIT | wc -l
446`
在redis端口上居然有446个TIME_WAIT。
我不知道这种情况是否算正常呢?如果不正常,应该优化哪些参数?

展开
收起
落地花开啦 2016-02-27 14:01:40 6548 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    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

    2019-07-17 18:48:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载