LINUX.ORG.RU
ФорумAdmin

Fork()

 , ,


0

2

Столкнулся с проблемой форка. Есть скрипт на php, который форкает некоторые запросы. Иногда не форкается, говорит не могу. Методом тыка заметил, что зависит это от памяти.
Сервер имеет 16 гигов памяти, скрипт N занимает 7 гигов. Запускаю скрипт Х, который по мере работы начинает занимать память 3 гига(да, где-то утечка, но не суть) и наступает данная проблема, в скрипте N пишет что не могу сделать форк, хотя скрипт Х нормально форкается. Всего памяти в данный момент используется 11.5 гигов. Почему не форкается, если свободно ещё около 5 гигов и почему скрипт Х продолжает форкаться? Скрипты запускаю не от рута, через судо. Где какие ограничения могут быть? В пыхе, в лимитах пользователя, в системе?

★★★

Какой системный вызов проваливается? Какой errno возвращается?

Уверены, что проблема с памятью, а не с лимитом процессов? Гляньте prlimit --pid PID. Увеличьте, если нужно.

zuzzas ()
Ответ на: комментарий от zuzzas

Вызов fork. Не лимитом точно, проверял запускал 10000 форков. Если программа занимает 6 гигов, а свободно 5 гиг, то может быть не хватает? Хотя я проверял форки не занимают вообще память

gobot ★★★ ()
Ответ на: комментарий от gobot

Хотя я проверял форки не занимают вообще память

почитай про copy-on-write в man 2 fork

hizel ★★★★★ ()
Ответ на: комментарий от gobot

Вы уверены, что системный вызов clone проваливается с errno ENOMEM?

fork - это функция glibc, которая представляет собой обёртку вокруг системного вызова clone (с версии ядра Linux 2.3.3).

zuzzas ()

Недавно поднимали похожую проблему

# cat /proc/meminfo
Интерисуют поля CommitLimit и Committed_AS, также интерисует версия ядра и содержимое /proc/sys/vm/overcommit_memory

zaz ★★★★ ()
Ответ на: комментарий от zuzzas

0 там по дефолту, и с ним могут быть проблемы. Чтобы отключить контроль по оверкомиту нужна 1

zaz ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.