Làm thế nào để tôi cung cấp cho răng sát thủ OOM một lần nữa?


12

Ngày trước, tôi thường nguyền rủa kẻ giết người OOM vì quá hung hăng và giết chết các ứng dụng tôi đang sử dụng. Bây giờ, khi tôi định kỳ xem hệ thống của mình bị giật trong 15 phút vì một số chương trình không phù hợp, và cuối cùng phải dùng đến việc tắt nguồn vì nó không phản hồi với bàn phím, tôi nhận ra rằng tôi đã hiểu nó tốt hơn tôi nhận ra trở lại sau đó.

Làm cách nào để khôi phục OOM-killer theo cách cũ, khát máu của nó?


1
Hãy xem các chương trình gây ra sự cố và giới hạn dung lượng bộ nhớ mà chúng có thể sử dụnglimits.conf
LawrenceC

Câu trả lời:


4

Tôi sẽ giảm số lượng không gian trao đổi bạn có sẵn. Các bản cài đặt điển hình ngày nay cố gắng phân bổ số lượng trao đổi nhiều như có bộ nhớ vật lý (hoặc đôi khi gấp đôi số lượng). Vấn đề với điều này là khi có thứ gì đó bị trục trặc, hệ thống rơi vào vòng xoáy chết chóc khi cố gắng "xáo trộn" mọi thứ từ bộ nhớ sang đĩa, và quay lại, và nó bắt đầu làm quá nhiều việc nó không có thời gian để đáp ứng để người dùng nhập liệu.

Trong những ngày tốt, toàn bộ quá trình được hoán đổi ra đĩa (và quay lại), do đó cần có sự hoán đổi lớn.

Trong các hệ thống bộ nhớ ảo hiện đại, bộ nhớ được hoán đổi thành các khối (chứ không phải toàn bộ quá trình), do đó bạn có thể nhận được bằng các giao dịch hoán đổi nhỏ hơn. Trong kịch bản của bạn, tốt hơn hết là bạn nên xử lý các quy trình bị giết, do đó, việc chạy với trao đổi nhỏ hơn sẽ khiến OOM bắt đầu tiêu diệt các quy trình sớm hơn (thay vì hệ thống dành thời gian hoán đổi công cụ cho / từ đĩa).


Tôi không có trao đổi, và hệ thống của tôi khóa trong hơn 20 phút khi tôi có một vòng lặp javascript vô hạn bằng crom hơn là đẩy vào một mảng hoặc một cái gì đó. Tôi cần OOMK để kích hoạt trước khi hệ thống của tôi vô dụng, không còn cách nào khác.
JasonWagger

0

Đây là những gì làm việc cho tôi:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

Đó chỉ là khởi động này. Bạn có thể kiểm tra bằng cách chạy các mục sau trong tab bảng điều khiển của trình kiểm tra trình duyệt của bạn:

a = []; while (true) { a.push(1); }

Nếu bạn hài lòng với cài đặt này, bạn có thể đặt mặc định cho tất cả các bốt trong tương lai:

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.