Bạn đã /proc/sys/vm/overcommit_memory
thiết lập những gì? Từ tài liệu kernel:
0 - Heuristic overcommit handling. Obvious overcommits of
address space are refused. Used for a typical system. It
ensures a seriously wild allocation fails while allowing
overcommit to reduce swap usage. root is allowed to
allocate slightly more memory in this mode. This is the
default.
1 - Always overcommit. Appropriate for some scientific
applications.
2 - Don't overcommit. The total address space commit
for the system is not permitted to exceed swap + a
configurable percentage (default is 50) of physical RAM.
Depending on the percentage you use, in most situations
this means a process will not be killed while accessing
pages but will receive errors on memory allocation as
appropriate.
Do đó, nếu bạn đang sử dụng 1 thì không có sự khác biệt. Nếu bạn đang sử dụng 2 và không có tệp hoán đổi linux thì sẽ không có quá trình nào có thể phân bổ 512M bộ nhớ (ảo). Kết quả không rõ ràng cho 0.
Chỉnh sửa: Từ http://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommit đây là cách 0 hoạt động:
Heuristic overcommit cố gắng tìm ra bao nhiêu bộ nhớ mà hệ thống có thể cung cấp cho bạn nếu nó lấy lại tất cả bộ nhớ có thể và không có quá trình nào khác sử dụng nhiều RAM hơn hiện tại; nếu bạn yêu cầu nhiều hơn thế, phân bổ của bạn sẽ bị từ chối. Cụ thể, số 'bộ nhớ trống' lý thuyết được tính bằng cách thêm dung lượng trao đổi miễn phí, RAM miễn phí (dưới 1/32 nếu bạn không root) và tất cả không gian được sử dụng bởi bộ đệm bộ đệm hợp nhất và dữ liệu kernel được gắn nhãn là có thể thu hồi được (ít hơn một số trang dành riêng).
Vì vậy, nó sử dụng trao đổi trong tính toán là tốt. Nói chung, tôi sẽ làm theo khuyến nghị của RHEL về:
M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
S = M *2
Else
S = M + 2