Trong cụm của chúng tôi, chúng tôi đang giới hạn các tài nguyên quy trình của mình, ví dụ như bộ nhớ ( memory.limit_in_bytes
).
Tôi nghĩ rằng, cuối cùng, điều này cũng được xử lý thông qua trình diệt OOM trong nhân Linux (trông giống như nó bằng cách đọc mã nguồn ).
Có cách nào để có được tín hiệu trước khi quá trình của tôi bị giết không? (Giống như -notify
tùy chọn cho SGEqsub
, sẽ gửi SIGUSR1
trước khi quá trình bị hủy.)
Tôi đọc về /dev/mem_notify
đây nhưng tôi không có nó - ngày nay có gì khác không? Tôi cũng đọc cái này có vẻ hơi liên quan.
Tôi muốn có thể ít nhất kết xuất một dấu vết ngăn xếp nhỏ và có thể một số thông tin gỡ lỗi hữu ích khác - nhưng có lẽ tôi thậm chí có thể khôi phục bằng cách giải phóng một số bộ nhớ.
Một cách giải quyết khác mà tôi hiện đang sử dụng là tập lệnh nhỏ này thường kiểm tra xem tôi có gần (95%) đến giới hạn không và nếu có, nó sẽ gửi quy trình a SIGUSR1
. Trong Bash, tôi đang bắt đầu tập lệnh này ở chế độ nền ( cgroup-mem-limit-watcher.py &
) để nó theo dõi các procs khác trong cùng một nhóm và nó tự động thoát khi quá trình Bash cha mẹ chết.