Назад | Перейти на главную страницу

Ошибка «Невозможно выполнить форк: повторить…» в RH5. Нужна информация о nproc

У нас сегодня утром фактически отключился сервер. Отключился доступ по SSH, и, по крайней мере, временно отключился доступ к сети. Мы смогли войти в систему, используя внеполосный доступ, и нам представили экран, полный сообщений «Init: cannot fork, retry ..».

При попытке войти в систему, когда мы ввели идентификатор пользователя и неверный пароль, мы получили обычную ошибку «неверный пользователь / пароль». Однако, если мы ввели правильный идентификатор пользователя и пароль, нам просто снова представили MOTD и экран входа в систему. Похоже, что система больше не могла запускать какие-либо новые процессы (успешный вход в систему должен запускать оболочку, если она не может догадаться, она отбрасывает вас обратно при входе в систему?).

Я нашел описание проблемы в базе знаний 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 отлаживать НО сначала проверьте это. Он производит ОГРОМНОЕ количество журналов, и без хорошего размера кольцевого буфера или огромного широкого монитора пропуск сообщений, отображаемых на терминале, довольно распространено.

Но я много раз видел эту проблему. Позвольте сказать вам, почему бы не спросить ребят из Red Hat, есть ли у вас подписка.

Похоже, либо (1) у вас закончилась память + пространство подкачки, либо (2) ошибочный процесс переполнил вашу таблицу процессов, препятствуя созданию новых процессов.