前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈TCP状态之 FIN_WAIT1

浅谈TCP状态之 FIN_WAIT1

原创
作者头像
brucekuang
发布2019-02-18 21:21:44
7.4K0
发布2019-02-18 21:21:44
举报
文章被收录于专栏:直播架构

还记得,那年那天,在我负责的一个模块的某台机器上出现了大量FIN_WAIT1的TCP连接(连上的是nginx监听的某端口)

问题现象:

1. 查询每一条处于FIN_WAIT1的连接客户端,发现客户端TCP状态仍然是ESTABLISHED

2. 这种连接会一直存在(对某一条进行监视,发现一个多小时后状态仍然不变)

3. 重启机器上的nginx进程,连接仍然存在

4. 执行命令 echo 3 > /proc/sys/net/ipv4/tcp_fin_timeout(默认值60s), 仍然没有效果

5. 大量内存因此被消耗

查了很久之后发现:

这种连接的产生是因为客户端程序异常,一直不处理报文,导致TCP Server端发送缓冲区塞满了数据,客户端自己的接收缓冲区里也填满了数据

Server因为收发包失败后在应用层调用了close,于是Server端TCP状态机进入FIN_WAIT1,但是这个FIN也发不出去(Server被憋死了...)

Server端这种连接叫做orphaned connection(no longer referenced by any application)

通过设置 /proc/sys/net/ipv4/tcp_max_orphans可以限制orphaned connection的最大数量,最后我们也是通过设置这个值强行回收了内存...

找到一篇相关的文章介绍,感兴趣的同学可以看一下

http://huoding.com/2014/11/06/383

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档