Ada pengaturan kernel
/ proc / sys / vm / overcommit_memory
Kutipan dari artikel luar biasa :
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.)
Ini berlaku untuk garpu dan juga malloc biasa. Yaitu jika Anda menetapkan ke 0, garpu akan disalin saat menulis. Salin saat menulis berarti bahwa sekali aplikasi bercabang dua, maka salinan itu akan berbagi halaman memori menggunakan anak atau asli mulai mengubah memori.
Dalam sebagian besar distribusi, saya tahu overcommit adalah 0. Tetapi jika Anda mengaturnya menjadi 2, semua halaman memori akan sepenuhnya didukung oleh memori nyata dan dalam beberapa kasus di bawah tekanan memori tinggi akan lebih stabil, tetapi beberapa program (saya menghadapi gitk) yang mengandalkan pada overcommits akan gagal.
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.
Ya terima kasih. Berarti bahwa mengurangi jejak virtual dari proses di lingkungan dengan memori terbatas (RAM dan swap) dapat memecahkan masalah tidak mampu melakukan fork.