Çekirdek ayarı var
/ Proc / sys / vm / overcommit_memory
Mükemmel makaleden alıntı :
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.)
Bu, çatallar ve normal malloc için geçerlidir. Yani 0 olarak ayarlarsanız, çatal yazma sırasında kopyalanır. Yazarken kopyala, uygulama bir kez çatallandığında, her iki kopyanın da alt sayfalardan bellek sayfalarını paylaşacağı veya orijinalin belleği değiştirmeye başladığı anlamına gelir.
Çoğu dağıtımda aşırı işlem 0 olduğunu biliyorum. Ancak 2'ye ayarlarsanız, tüm bellek sayfaları gerçek bellekle tamamen desteklenir ve bazı durumlarda yüksek bellek basıncı altında daha kararlı olur, ancak bazı programlar (Gitk ile karşılaştım) overcommits başarısız olur.
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.
Evet teşekkür ederim. Yani, sınırlı belleğe (RAM ve takas) sahip bir ortamda sürecin sanal ayak izinin azaltılması, çatallanamama sorununu çözebilir.