Đối với những gì tôi hiểu, khi hệ thống gần không có bộ nhớ trống, kernel sẽ bắt đầu tiêu diệt các tiến trình để lấy lại bộ nhớ. Nhưng trong hệ thống của tôi, điều này hoàn toàn không xảy ra.
Giả sử một tập lệnh đơn giản chỉ phân bổ nhiều bộ nhớ hơn mức có sẵn trong hệ thống (ví dụ, một mảng có hàng triệu chuỗi). Nếu tôi chạy một tập lệnh như thế này (như một người dùng bình thường), nó chỉ nhận được tất cả bộ nhớ cho đến khi hệ thống đóng băng hoàn toàn (chỉ SysRQ REISUB hoạt động).
Điều kỳ lạ ở đây là khi máy tính đóng băng, đèn led ổ cứng bật và giữ nguyên như vậy cho đến khi máy tính được khởi động lại, dù tôi có gắn phân vùng trao đổi hay không!
Vì vậy, câu hỏi của tôi là:
- Hành vi này có bình thường không? Thật kỳ lạ khi một ứng dụng được thực thi như một người dùng bình thường có thể làm sập hệ thống theo cách này ...
- Có cách nào để tôi có thể khiến Ubuntu tự động hủy các ứng dụng đó khi chúng chiếm quá nhiều (hoặc nhiều nhất) bộ nhớ không?
Thông tin thêm
- Ubuntu 12.04.3
- Hạt nhân 3.5.0-44
RAM: ~ 3,7GB từ 4GB (dùng chung với card đồ họa). *
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
). Nhưng không có trao đổi, nó chỉ đóng băng máy tính. Nó được cho là hoạt động theo cách này (chỉ giết khi sử dụng trao đổi)?
tail -n+1 /proc/sys/vm/overcommit_*
và thêm đầu ra. Xem thêm tại đây: Làm cách nào để định cấu hình oom-killer