我们有一台服务器今天早上有效下降. SSH访问被切断,至少暂时网络访问也下降了.我们能够使用带外访问登录,并显示一个充满“Init:can not fork,retry ..”消息的屏幕.
当我们尝试登录时,当我们输入用户ID和密码错误时,我们得到了正常的“无效用户/通行证”错误.但是,如果我们输入正确的用户ID和密码,我们只会再次显示MOTD和登录屏幕.看起来系统不再能够启动任何新进程(成功登录应该启动一个shell,如果它不能,我猜它会在登录时让你失望?).
我在Red Hat的知识库(https://access.redhat.com/site/solutions/39497)中找到了对该问题的描述,但是关于错误的补充信息很少,只是一个建议的解决方案.
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()时,从现有进程创建一个新进程.在这里,我们有一些不允许fork()的条件.
您在分配udev子进程时遇到问题.我想,这是在开机时发生的.看到这个
/ LIB / udev的/ udev_run_hotplugd
所以那里有一些热插拔设备.否则,我没有看到调用该库的原因.
现在有两个建议 –
1)如果您可以复制它,请尽可能使用它.获取失败的系统调用.这样容易多了.我不完全记得它是哪个系统调用.
2)在调试模式下运行udev.将udev_log = info更改为debug但首先测试它.它产生大量的日志,没有良好的环形缓冲区大小或巨大的宽监视器,错过了终端上显示的消息是相当普遍的.
但我已经看过很多这个问题了. Lemme告诉你,为什么不问红帽人你是否有订阅.