我们有一个应用程序在linux的.net内核2.1上运行。当我们将负载应用于此应用程序时(5个特定API的并发请求,仅在5次命中后(,它将挂起,这意味着API不再响应任何请求。进入Linux盒子并运行之后:
netstat -anp --tcp
我可以看到几个CLOSED_WAIT连接。
如果我运行"良好负载"(不同的api调用,几分钟内更高的速率和更高的并发性(,这种行为就不会发生。因为我没有看到任何处于CLOSE_WAIT状态的连接。
我们试图在windows中进行本地复制,但没有成功。
有谁经历过这种套接字泄漏的行为,我想问题是什么?
您可以调整Tcp等待延迟的时间。
在Windows中,修改regedit\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay
在Linux中,修改
net.ipv4.tcp_syn_retries=2
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_orphan_retries=3
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_probes=5
net.core.netdev_max_backlog=3000