.net核心应用程序套接字在负载下​​泄漏

时间:2018-12-14 08:07:20

标签: asp.net .net linux sockets nginx

我们有一个在Linux上的.net core 2.1上运行的应用程序。当我们对此应用程序施加负载(5个命中后,仅5个特定API并发5个并发请求)时,该应用程序将挂起,这意味着api将不再响应任何请求。 进入Linux框并运行后:

netstat -anp --tcp

我可以看到几个CLOSED_WAIT连接。

如果我运行“良好的负载”(几分钟内不同的api调用,更高的速率和更高的并发性),则不会发生此行为。因为我看不到处于CLOSE_WAIT状态的任何连接。

我们尝试在Windows中本地复制,但是没有发生。

有人认为我认为这个问题是由于套接字泄漏引起的吗?

1 个答案:

答案 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