我们有一些 Ubuntu (18.04) 服务器在 Kestrel 上运行 .NET Core 应用程序。最近这些应用程序和操作系统一直挂起,需要重新启动整个 VM。
我们发现该应用程序有太多的网络套接字文件描述符。例如 /proc/
相应地,使用 lsof 进行查询将显示 dotnet 进程泄漏的 sock 类型“协议:TCP”池不断增长。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dotnet 6905 www-data 675u sock 0,9 0t0 96816 protocol: TCP
dotnet 6905 www-data 676u sock 0,9 0t0 96863 protocol: TCP
dotnet 6905 www-data 677u sock 0,9 0t0 96910 protocol: TCP
dotnet 6905 www-data 678u sock 0,9 0t0 96959 protocol: TCP
dotnet 6905 www-data 679u sock 0,9 0t0 97006 protocol: TCP
dotnet 6905 www-data 680u sock 0,9 0t0 97053 protocol: TCP
dotnet 6905 www-data 681u sock 0,9 0t0 97101 protocol: TCP
从另一个有类似报告问题的帖子中, https://serverfault.com/questions/153983/sockets-found-by-lsof-but-not-by-netstat 我们理解这是由于.NET 应用程序中的某些代码(可能是某些库)打开了套接字而没有绑定 IP 地址或端口。
然而,在这种情况下,我们特别想知道的是,设备 0 和 9在这种情况下?我看到其他报告列出了 0.5 或 0.7,但没有人解释这些数字代表哪种类型的设备。