Dockerized .Net核心“设备上没有剩余空间”错误

时间:2019-05-30 11:12:11

标签: docker kubernetes .net-core

在项目中,我们面临与Docker代理崩溃的问题“设备上没有剩余空间”。

在K8S集群的一个节点上,我们执行了以下命令:

# ps -eLf | grep './DotNetApp' | awk '{print $10}' | wc -l
13882

这意味着我所有的.Net进程都有13882线程。在节点上,此泄漏限制为最大线程数。

要检查限制,可以执行:

root@ip-172-20-104-47:~# cat /proc/sys/kernel/pid_max
32768

“线程数”是数量,但是pid_max与ID池有关。并且Pod可以轻松达到此限制并使docker在节点上崩溃。

我们将CentOS用于K8S工作者。我们尝试了Ubuntu,并获得了相同的结果。

您有什么想法,为什么在.net core 2.2下的Linux节点上会有这样的线程泄漏?

1 个答案:

答案 0 :(得分:0)

这个问题很有趣。我们决定为 Redis 创建一个健康检查。如果 Redis 不可用,我们只是击落了 pod。但是,在为每个 /health 调用执行此健康检查时,它创建了单独的连接多路复用器,而没有处理旧的连接多路复用器。因此,经过一段时间后,达到了可用线程的限制。

因此,在实施健康检查时要小心。