Điều này được giải thích ở đây là OOM-Killer có thể được cấu hình thông qua overcommit_memory
và rằng:
- 2 = không thừa. Phân bổ thất bại nếu yêu cầu quá nhiều.
- 0, 1 = overcommit (theo kinh nghiệm hoặc luôn luôn). Giết một số tiến trình dựa trên một số heuristic khi quá nhiều bộ nhớ thực sự được truy cập.
Bây giờ, tôi có thể hoàn toàn hiểu sai về điều đó, nhưng tại sao không có tùy chọn (hoặc tại sao nó không phải là mặc định) để giết chính quá trình thực sự cố gắng truy cập quá nhiều bộ nhớ được phân bổ?
Điều gì xảy ra nếu một quá trình hệ thống quan trọng yêu cầu quá nhiều bộ nhớ?
—
Lawrence
Ở nơi đầu tiên - nó có thể làm điều này. Nhưng, vấn đề lớn nhất với câu hỏi đó là trong tất cả khả năng nếu một quá trình yêu cầu bộ nhớ thì nó mới được thực thi - hay nói cách khác, đây là một quy trình mới liên quan đến việc xử lý rất hiện tại. Bạn có muốn OOM cho phép khách hàng im không mở trong 3 ngày của bạn tiếp tục lãng phí bộ nhớ hệ thống hay bạn muốn YouTube thực sự tải một số thời gian trong năm nay? linuxHRyram.com
—
mikeerv
Đây là những gì
—
Barmar
no overcommit
tùy chọn về cơ bản làm. Nếu một quá trình yêu cầu quá nhiều bộ nhớ, nó sẽ thất bại. Nếu nó kiểm tra lỗi, nó thường sẽ tự chết; nếu không, nó có thể sẽ gặp Lỗi phân đoạn khi nó cố gắng hủy bỏ con trỏ null malloc()
trả về và nó sẽ bị sập.
Lưu ý rằng 2 thực sự là
—
hans_meine
no overcommit
chế độ, theo các nguồn được trích dẫn (chẳng hạn như kernel.org/doc/Documentation/vm/overcommit-accounting ). Tôi nghĩ rằng tôi sẽ chỉnh sửa câu hỏi của bạn cho phù hợp.