Есть настройки ядра
/ Proc / SYS / VM / overcommit_memory
Цитата из отличной статьи :
Since 2.5.30 the values are: 0 (default): as before: guess about how much
overcommitment is reasonable, 1: never refuse any malloc(), 2: be precise
about the overcommit - never commit a virtual address space larger than swap
space plus a fraction overcommit_ratio of the physical memory. Here
/proc/sys/vm/overcommit_ratio (by default 50) is another user-settable
parameter. It is possible to set overcommit_ratio to values larger than 100.
(See also Documentation/vm/overcommit-accounting.)
Это относится как к вилкам, так и к обычным malloc. Т.е. если вы установите его на 0, форк будет копироваться при записи. Копирование при записи означает, что после того, как приложение разветвится, обе его копии будут совместно использовать страницы памяти, если дочерний элемент или оригинал начнет изменять память.
В большинстве дистрибутивов я знаю, что overcommit равен 0. Но если вы установите его на 2, все страницы памяти будут полностью защищены реальной памятью, а в некоторых случаях под высоким давлением памяти будут более стабильными, но некоторые программы (я сталкивался с gitk), которые полагаются на сверхкоммитах не получится.
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.
Да спасибо. Это означает, что уменьшение виртуального следа процесса в среде с ограниченной памятью (ОЗУ и подкачка) может решить проблему невозможности форка.