Nếu bộ nhớ được sử dụng triệt để bởi các quá trình, đến mức có thể đe dọa sự ổn định của hệ thống, thì kẻ giết người OOM sẽ xuất hiện.
LƯU Ý: Nhiệm vụ của OOM Killer là tiếp tục các tiến trình tiêu diệt cho đến khi giải phóng đủ bộ nhớ cho hoạt động trơn tru của phần còn lại của quá trình mà Kernel đang cố chạy.
OOM Killer phải chọn quy trình tốt nhất để tiêu diệt. Tốt nhất ở đây đề cập đến quá trình đó sẽ giải phóng bộ nhớ tối đa khi giết và cũng là điều ít quan trọng nhất đối với hệ thống.
Mục tiêu chính là tiêu diệt số lượng quá trình ít nhất nhằm giảm thiểu thiệt hại và đồng thời tối đa hóa lượng bộ nhớ được giải phóng.
Để tạo điều kiện cho điều này, kernel duy trì một oom_score
cho mỗi tiến trình. Bạn có thể thấy oom_score
từng tiến trình trong /proc
hệ thống tập tin trong pid
thư mục.
$ cat /proc/10292/oom_score
Giá trị của oom_score
bất kỳ quá trình nào càng cao thì khả năng bị giết bởi OOM Killer càng cao trong tình huống hết bộ nhớ.
Làm thế nào là OOM_Score
tính toán?
Trong bộ vá của David, các heuristic cũ () đã gần như biến mất hoàn toàn. Thay vào đó, phép tính biến thành một câu hỏi đơn giản về tỷ lệ phần trăm bộ nhớ khả dụng đang được quá trình sử dụng. Nếu toàn bộ hệ thống bị thiếu bộ nhớ, thì "bộ nhớ khả dụng" là tổng của tất cả RAM và dung lượng trao đổi có sẵn cho hệ thống.
Nếu thay vào đó, tình huống OOM gây ra do cạn kiệt bộ nhớ cho phép một nhóm điều khiển / nhóm điều khiển nhất định, thì "bộ nhớ khả dụng" là tổng số tiền được phân bổ cho nhóm điều khiển đó. Một tính toán tương tự được thực hiện nếu vượt quá giới hạn áp dụng bởi chính sách bộ nhớ. Trong mỗi trường hợp, việc sử dụng bộ nhớ của quá trình được coi là tổng của bộ lưu trú của nó (số trang RAM mà nó đang sử dụng) và mức sử dụng trao đổi của nó.
Kết quả tính toán này tạo ra một con số phần trăm lần mười; một quá trình sử dụng mỗi byte của bộ nhớ có sẵn sẽ có điểm 1000, trong khi một quá trình không sử dụng bộ nhớ nào sẽ nhận được điểm 0. Có rất ít điều chỉnh heuristic cho điểm này, nhưng mã vẫn trừ một lượng nhỏ (30) từ điểm của các quy trình thuộc sở hữu gốc với quan điểm rằng chúng có giá trị hơn một chút so với quy trình do người dùng sở hữu.
Một điều chỉnh khác được áp dụng là thêm giá trị được lưu trữ trong biến oom_score_adj của mỗi tiến trình, có thể được điều chỉnh thông qua / Proc. Núm này cho phép điều chỉnh mức độ hấp dẫn của từng quy trình đối với kẻ giết người OOM trong không gian người dùng; đặt nó thành -1000 sẽ vô hiệu hóa hoàn toàn OOM giết chết, trong khi cài đặt thành +1000 tương đương với việc vẽ một mục tiêu lớn trên quy trình liên quan.
Người giới thiệu
http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-
Process https://serverfault.com/a/571326