软限制与硬限制

软限制与硬限制

我遇到了一个问题:

fork: Resource temporarily unavailable

我知道这nproc就是问题所在一些人建议增加软限制,nproc而另一些人则建议增加硬限制。

我应该增加哪一个?难道软限制只是为了警告用户而硬限制才是最终真正的限制吗?

答案1

实际上是相反的。

软限制的值实际上已实现,即在使用中,您可以将限制增加到相关硬限制的值(假设您不是超级用户或没有CAP_SYS_RESOURCE能力)。

答案2

将硬限制和软限制分别视为强制性限制和酌情限制。硬限制由系统施加(通过适当的配置,例如limits.conf(5)),并且只能由超级用户(即root)增加,而用户可以在相应的硬限制的范围内自行判断软限制。

getrlimits(2)手册页:

软限制是内核对相应资源强制执行的值。硬限制充当软限制的上限:非特权进程只能将其软限制设置为 0 到硬限制范围内的值,并(不可逆地)降低其硬限制。

因此,如果达到资源限制,请检查是否可以增加相应的软限制;如果不是,则需要增加硬限制。

对评论的回应

不存在这样的事情只有硬限制。限制由 设定setrlimit(2),它指的是struct rlimit。这又具有软限制和硬限制的成员(分别为rlim_currlim_max)。如果没有明确定义软限制,则它默认为某个值;最有可能的是相应的硬限制,但这取决于设置限制的过程。 (setrlimits(2)拒绝rlim_cur超过rlim_max,所以RLIM_INFINITY通常是不是的有效默认值rlim_cur。)

相关内容