Tôi cho rằng đó không phải là một vấn đề hiếm gặp: một quá trình phân bổ số lượng lớn bộ nhớ (có thể là do lỗi rò rỉ bộ nhớ, bởi vì bạn cố xử lý một tệp đầu vào lớn vô cùng, hoặc bất cứ điều gì). RAM đầy lên và đến một lúc nào đó Linux phải chuyển sang trao đổi. Chà, đôi khi đây chỉ là giải pháp cuối cùng: nếu tôi có một tính toán đắt tiền, tôi không muốn mất dữ liệu nếu đến cuối cùng tôi hết RAM.
Tuy nhiên, thường xuyên hơn (theo kinh nghiệm của tôi), mức tiêu thụ bộ nhớ không bị ràng buộc, bởi một quá trình lừa đảo, có lẽ là lỗi. Tức là, tôi không chỉ kết thúc với một số dữ liệu ít cần thiết hơn được chuyển sang trao đổi, nhưng HĐH buộc phải hoán đổi tải dữ liệu một cách hoảng loạn. Và thật không may, nó không chỉ phá vỡ quá trình vi phạm mà còn có thể khiến toàn bộ hệ thống gần như đứng yên (nó không còn tệ như vậy nữa trên các máy có SSD, nhưng OTOH nó khiến tôi lo lắng liệu việc ghi dữ liệu rác và gigabyte có thể trong về lâu dài gây hại cho các tế bào flash).
Cho đến khi tôi nhận thấy sự cố và tự xử lý quá trình (một khi nó thực sự mất vài phút cho đến khi tôi thậm chí đã đăng nhập vào một thiết bị ảo!), Một nửa phiên chạy của tôi đã được trao đổi và tôi cần đợi khá lâu cho đến khi hệ thống chạy trơn tru lần nữa.
Có một giải pháp khắc nghiệt cho vấn đề: thực thi giới hạn bộ nhớ cứng. Nhưng việc thực hiện trên toàn hệ thống này đôi khi sẽ giết chết các quy trình mà tôi vẫn cần, và nếu tôi phải làm thủ công ulimit
trước khi bắt đầu một quy trình vi phạm ... tốt, tôi thường sẽ quên cho đến khi quá muộn.
Các loại giải pháp có thể tôi sẽ hạnh phúc hơn với:
- Nếu bất kỳ quá trình nào vượt quá mức sử dụng bộ nhớ nhất định, thì nó sẽ được điều chỉnh một cách giả tạo để phần còn lại của hệ thống vẫn phản hồi.
- Nếu bất kỳ quá trình nào vượt quá mức sử dụng bộ nhớ nhất định, thì đó là lúc
SIGSTOP
tôi có thời gian để tìm hiểu phải làm gì tiếp theo. - Nếu một quá trình đạt đến giới hạn RAM, tôi sẽ nhận được cảnh báo, trước khi quá trình hoán đổi lớn bắt đầu.
Có cách nào để có được một hành vi như vậy, hoặc tương tự?
ulimit
là dành cho.