RH5中的“无法分叉:重试…”错误。 需要关于nproc的信息

我们有一台服务器今天早上有效地下降。 SSH访问被切断,至less暂时的networking访问也停止了。 我们可以使用带外访问进行login,并显示一个完整的“Init:can not fork,retry ..”消息。

当试图login,当我们input一个用户名和密码错误,我们得到了正常的“无效的用户/通行证”错误。 但是,如果我们input正确的用户名和密码,我们只需再次提交MOTD和login屏幕。 看起来系统已经不能启动任何新的进程了(login成功后应该启动一个shell,如果不行,我猜测它会在login时丢弃你)。

我在红帽的知识库( https://access.redhat.com/site/solutions/39497 )上发现了这个问题的描述,但是关于这个错误的补充信息很less,只是一个build议的解决scheme。

nproc到底做了什么? 对于系统在任何时间点可以运行的进程数量是否有严格的限制? 当nproc被超过时,会造成我们所看到的影响吗? 有没有办法将其设置为无限制? 如果没有,我们怎么知道安全或不安全的范围是什么?

任何帮助或指导将非常感激,因为它造成的生产问题,现在是在几个层8人的盘子:(

编辑:另外在/ var / log / messages:

May 31 15:26:00 servername udevd[1637]: udev_event_run: fork of child failed: Resource temporarily unavailable May 31 15:26:00 servername last message repeated 3 times May 31 15:26:00 servername udevd-event[2461]: run_program: fork of '/lib/udev/udev_run_hotplugd' failed: Resource temporarily unavailable May 31 15:26:00 servername udevd-event[2461]: run_program: fork of '/lib/udev/udev_run_devd' failed: Resource temporarily unavailable May 31 15:26:00 servername udevd[1637]: udev_event_run: fork of child failed: Resource temporarily unavailable 

错误消息意味着服务器超出了进程数的限制。 有两个限制 – 硬和软。 当你fork()时,你从现有的进程创build一个新的进程。 在这里,我们有一些不允许fork()的条件。

您在分派udevsubprocess时遇到问题。 我想这是在启动时发生的。 看到这个

/ LIB / udev的/ udev_run_hotplugd

所以那里有一些热插拔设备。 否则,我没有看到这个图书馆被叫的原因。

现在有两个build议 –

1)如果可以重现,尽可能将其重新排列。 获取系统调用失败的地方。 这种方式更容易。 我不记得它是哪个系统调用。

2)在debugging模式下运行udev。 更改udev_log=info进行debugging, 首先testing它。 它产生大量的日志,没有一个好的环形缓冲区大小或一个巨大的宽屏显示器,丢失在terminal上显示的信息是相当普遍的。

但是我看到这个问题很多。 Lemme告诉你,如果你有订阅,为什么不问红帽的人呢?

听起来像(1)内存不足或交换空间不足,或(2)错误的进程淹没了进程表,从而阻止创build新进程。