Có cài đặt kernel
/ Proc / sys / vm / overcommit_memory
Trích dẫn từ bài viết xuất sắc :
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.)
Điều này áp dụng cho dĩa cũng như malloc thông thường. Tức là nếu bạn đặt nó thành 0, fork sẽ được sao chép khi ghi. Sao chép trên ghi có nghĩa là một khi ứng dụng rẽ nhánh, cả hai bản sao sẽ chia sẻ các trang bộ nhớ sử dụng con hoặc bản gốc bắt đầu thay đổi bộ nhớ.
Trong hầu hết các bản phân phối tôi biết overcommit là 0. Nhưng nếu bạn đặt nó thành 2, tất cả các trang bộ nhớ sẽ được hỗ trợ đầy đủ bởi bộ nhớ thực và trong một số trường hợp dưới áp suất bộ nhớ cao sẽ ổn định hơn, nhưng một số chương trình (tôi phải đối mặt với gitk) trên overcommits sẽ thất bại.
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.
Vâng, cảm ơn. Có nghĩa là việc giảm dấu chân ảo của quá trình trong môi trường có bộ nhớ hạn chế (RAM và trao đổi) có thể giải quyết vấn đề không thể rẽ nhánh.