雅虎新闻|| BBC新闻|| CNN新闻|| 美元指数|| 中国期货指数|| 股票指数|| 黄金|| 外汇|| 英汉互译|| 昭放工具
163邮箱|| 126邮箱|| 新浪邮箱|| 企业邮箱|| 21cn邮箱|| tom邮箱|| 搜狐邮箱|| hotmail邮箱|| msn邮箱|| qq邮箱

用户登录

设为主页| 淘宝铺| 加入收藏|
您的IP:18.191.117.103您的操作系统:Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
个人便签
知识库
TCP Socket一直处于FIN_WAIT1的状态

落鹤生:前阵子在一个PPC 85xx的板子上出面一个问题,问题现象如下:两个会议终端正常入会,入会后直接将其中一个终端关机(或拔网线),结果导致另一终端的线程一直处于堵塞状态,经查发现该终端的socket(TCP)一直处于FIN_WAIT1的状态,要等到十几分钟之后该socket才能被正常关闭(关于TCP socket关闭的流程及FIN_WAIT1的说明可以参考这篇文章:http://www.rosoo.net/a/201406/16984.html)。

于是一阵子搜Google,有找到很多类似的问题,及所谓的解决方案,但无一能解决该问题,后经Review代码发现该socket被设置为BLOCK模式,最终在将该socket改为NON-BLOCKING模式,并在close该socket之前shutdown收发,即可将该socket的关闭时间缩短到几秒钟,并解决该问题。

以下为之前搜到的一个不正确的答案,但也可作为一个参考,故予以保留。

-----------------------------

fin_wait1过多问题

大部分是说net.ipv4.tcp_fin_timeout = 10来调节,不管用,狂在百度里谷歌:

net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_keepalive_intvl = 15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_orphan_retries = 3

net.ipv4.tcp_reordering = 5

net.ipv4.tcp_retrans_collapse = 0

一下子搞定,目前还不知道各个参数含义,待查!

全部的sysctl.conf如下:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_max_tw_buckets = 50000

net.ipv4.tcp_fin_timeout =10

net.ipv4.tcp_keepalive_time = 30

net.ipv4.tcp_window_scaling = 0

net.ipv4.tcp_sack = 0

fs.file-max = 65536

net.ipv4.tcp_max_syn_backlog = 65536

net.core.netdev_max_backlog = 32768

net.core.somaxconn = 32768

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_max_syn_backlog = 10240

net.core.netdev_max_backlog = 51200

net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_keepalive_intvl = 15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_orphan_retries = 3

net.ipv4.tcp_reordering = 5

net.ipv4.tcp_retrans_collapse = 0

星期四, 08/07/2014 - 11:33 — 杨超