Ngoài các câu trả lời khác, bạn có thể định cấu hình Linux để yêu cầu sao lưu cho mọi bộ nhớ được phân bổ, ngay cả khi các chương trình không sử dụng nó.
Tuy nhiên, bộ nhớ quá mức và sợ kẻ giết OOM không phải là những phần cần thiết trong trải nghiệm Linux. Chỉ cần đặt tham số sysctl vm / overcommit_memory thành 2 sẽ tắt hành vi overcommit và giữ cho kẻ giết người OOM mãi mãi ở lại. Hầu hết các hệ thống hiện đại nên có đủ dung lượng đĩa để cung cấp tệp hoán đổi rộng rãi cho hầu hết các tình huống. Thay vì cố gắng giữ cho các quá trình thú cưng không bị giết khi hết bộ nhớ quá mức, có thể dễ dàng hơn để tránh tình trạng này hoàn toàn. [ Thay thế từ kẻ giết người OOM ]
Nếu một chương trình phân bổ bộ nhớ, kernel chỉ có thể đánh dấu nhiều trang trao đổi hơn như đã cam kết. Dấu hiệu này được lưu trong trình quản lý bộ nhớ của kernel, không gian đĩa thực sự chưa được chạm vào. Cho đến khi bộ nhớ được sử dụng, không có gì thực sự phải hoán đổi trong và ngoài. Nếu chúng không bao giờ được sử dụng, thì việc sử dụng trao đổi sẽ dao động mà không ảnh hưởng đến hiệu suất.
Bởi vì các quy trình được trình bày với không gian địa chỉ của riêng họ hoặc "chế độ xem" (đây là cách trao đổi hoạt động ở vị trí đầu tiên), hạt nhân có rất nhiều sự chậm trễ trong cách quản lý điều đó. Sử dụng một ví dụ về ngã ba cũng từ bài viết được liên kết ở trên, vì nó có nhiều khả năng có các trang bộ nhớ chia sẻ hơn là phân bổ mới một lượng lớn bộ nhớ không sử dụng, bộ nhớ có thể được cấp phát sao chép, tăng số lần sử dụng trao đổi. Khi nó thực sự được ghi vào (điều này có thể không xảy ra), thì "hoán đổi đã cam kết" có thể được thay thế bằng bất kỳ RAM không sử dụng nào (sau đó tăng sử dụng RAM và giảm sử dụng trao đổi). Hãy tưởng tượng một quá trình với 500 MB được phân bổ sẽ tạo ra một máy tính có tất cả hoặc gần như toàn bộ RAM đang sử dụng. Nếu có 500 MB có sẵn trong trao đổi (và dung lượng ổ đĩa rẻ, thì 1% ổ TB ngày nay lớn đến mức nào ?: P), không có bộ nhớ nào phải được sao chép (chưa,
Do đó, khả năng của kẻ giết người OOM là tránh được, và việc thiết kế hầu hết các phần mềm đơn giản hơn với giả định rằng việc phân bổ bộ nhớ (bao gồm cả phân bổ "ngầm" thông qua một cái gì đó như ngã ba) có thể thành công hoặc thất bại ngay lập tức, với nhận thức thực tế rằng nếu bộ nhớ phải hoán đổi sau đó nó có thể ảnh hưởng đến hiệu suất. Tác động đó hầu như luôn luôn nhẹ, nhưng trong trường hợp xấu nhất dẫn đến hoán đổi trao đổi (đôi khi vẫn thích hợp hơn cho một vụ tai nạn hạt nhân hoàn toàn hoặc kẻ giết người OOM).
Mặc dù tôi không biết chi tiết chính xác về cách trình quản lý bộ nhớ Linux hoạt động, câu trả lời này là sự hiểu biết khái quát của riêng tôi và những gì tôi nhớ đã đọc trong nhiều năm qua. Tôi đã cố gắng chỉnh sửa lại câu trả lời này để hiểu biết tối thiểu về thiết kế HĐH (nó khá phức tạp và không phải là thứ tôi cực kỳ quan tâm đến bản thân mình), nhưng nó có vẻ lan man một chút; xin vui lòng cho tôi biết nếu bạn thấy nó có thể được cải thiện như thế nào. Trên bàn tay nắm bắt, nó có thể không phải là một câu hỏi cơ bản đáng xấu hổ.