这个问题很有趣。 因为我想很了解自己。 我做了几次测试,发现了有趣的结果。 即使连接服务器并等待60秒,它也总是被清理。 即使打开100个连接,他们也会在60秒后被清理。 即使打开101个连接,也会开始看到你说的州连接。 (我以前也见过。 无论fin_timeout的设置如何,它们似乎持续约120秒或2xMSL )或60秒。 在内核源代码中进行了一些挖掘,找到了我想的“原因”。 一些代码似乎试图限制每“周期”发生的套接字产量。 循环频率本身是基于HZ设定的:
Linux-source-2.6.38/include/net/inet _ time wait _ sock.h :
35 # define inet _ twdr _ recycle _ slots _ log 5
36 # define inet _ twdr _ recycle _ slots (1inet _ twdr _ recycle _ slots _ log ) )。
37
38 /*
39 * If time 4sec,it is 'slow' path,no recycling is required,40 * sothatweselectticktogetrangeabout4seconds。
41 */
42 #if HZ=16 || HZ 4096
43 # error unsupported 3360 Hz=16 orhz 4096
44 #elif HZ=32
45 # define inet _ twdr _ recycle _ tick (52-inet _ twdr _ recycle _ slots _ log ) )。
46 #elif HZ=64
47 # define inet _ twdr _ recycle _ tick (62-inet _ twdr _ recycle _ slots _ log ) )。
48 #elif HZ=128
49 # define inet _ twdr _ recycle _ tick (72-inet _ twdr _ recycle _ slots _ log ) )。
50 #elif HZ=256
51 # define inet _ twdr _ recycle _ tick (82-inet _ twdr _ recycle _ slots _ log ) )。
52 #elif HZ=512
53 # define inet _ twdr _ recycle _ tick (92-inet _ twdr _ recycle _ slots _ log )
54 #elif HZ=1024
55 # define inet _ twdr _ recycle _ tick (102-inet _ twdr _ recycle _ slots _ log ) )。
56 #elif HZ=2048
57 # define inet _ twdr _ recycle _ tick (112-inet _ twdr _ recycle _ slots _ log ) )。
58 #else
59 # define inet _ twdr _ recycle _ tick (12-inet _ twdr _ recycle _ slots _ log ) )。
60 #endif
61
62/* time _ waitreapingmechanism.* /
63 # define inet _ twdr _ tw kill _ slots8/* pleasekeepthisapowerof2. * /
thenumberofslotsisalsosethere :
65 # define inet _ twdr _ tw kill _ quota 100
在实际的timewait代码中,可以看到您已停止使用引号来杀死TIME_WAIT连接的位置。 如果已经做得太多了,如下所示。
Linux-source-2.6.38/net/IP v4/inet _ time wait _ sock.c :
213 staticintinet _ twdr _ do _ tw kill _ work (struct inet _ time wait _ death _ row * twdr,214 const int slot )
215 {
.
240 if (killed inet _ twdr _ tw kill _ quota ) {
241 ret=1;
242 break;
243 }
有关设置HZ的原因,请参阅此处。
http://kerneltrap.org/node/5411,但增加这一点并不罕见。 但是,我认为通常启用tw_reuse/recycle来绕过这个桶/配额机制是很常见的。 我读了这个很困惑。 我认为增加HZ会成为更安全、更清洁的解决方案。 发表了