我们有一个在Linux上的.net core 2.1上运行的应用程序。当我们对此应用程序施加负载(5个命中后,仅5个特定API并发5个并发请求)时,该应用程序将挂起,这意味着api将不再响应任何请求。 进入Linux框并运行后:
netstat -anp --tcp
我可以看到几个CLOSED_WAIT连接。
如果我运行“良好的负载”(几分钟内不同的api调用,更高的速率和更高的并发性),则不会发生此行为。因为我看不到处于CLOSE_WAIT状态的任何连接。
我们尝试在Windows中本地复制,但是没有发生。
有人认为我认为这个问题是由于套接字泄漏引起的吗?
答案 0 :(得分:1)
您可以调整Tcp Wait Delay的时间。
在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