Първо един цитат от man 4 tcp:
maxtcptw When a TCP connection enters the TIME_WAIT state, its
associated socket structure is freed, since it is of
negligible size and use, and a new structure is allo-
cated to contain a minimal amount of information nec-
essary for sustaining a connection in this state,
called the compressed TCP TIME_WAIT state. Since this
structure is smaller than a socket structure, it can
save a significant amount of system memory. The
net.inet.tcp.maxtcptw MIB variable controls the maxi-
mum number of these structures allocated. By default,
it is initialized to kern.ipc.maxsockets / 5.
nolocaltimewait Suppress creating of compressed TCP TIME_WAIT states
for connections in which both endpoints are local.
fast_finwait2_recycle
Recycle TCP FIN_WAIT_2 connections faster when the
socket is marked as SBS_CANTRCVMORE (no user process
has the socket open, data received on the socket can-
not be read). The timeout used here is
finwait2_timeout.
finwait2_timeout Timeout to use for fast recycling of TCP FIN_WAIT_2
connections. Defaults to 60 seconds.
Освен това при мен се получава, така че да не освобождава тези CLOSE_WAIT компресирани връзки и
да се натрупват до над 60 000 (на 1 машина). Честно казано не съм търсил къде е проблема, но за бързо решение
драснах един малък модул, който просто изчиства всички _компресирани_ връзки в CLOSE_WAIT в момента на зареждане, след
което проблема при мен се оправя и започват отново да си изтичат нормално. Може да си направиш скрипт, който
да следи за броя на висящи връзки в CLOSE_WAIT например.
Същия проблем имам и под FreeBSD 7.x. Този модул е за 6.x.
Ето модула ако мислиш, че ще ти е полезен:
http://93.152.160.252/tcpclean.tar.gzmake
kldload ./tcpclean.ko
kldunload tcpclean
Друг вариант може би е tcpdrop
man tcpdrop