Tôi có một máy tính xách tay Debian (Buster) với RAM 8 GB và trao đổi 16 GB. Tôi đang chạy một nhiệm vụ rất dài. Điều này có nghĩa là máy tính xách tay của tôi đã bị bỏ lại trong sáu ngày qua trong khi nó lướt qua.
Trong khi làm điều này, tôi định kỳ cần sử dụng máy tính xách tay của tôi như một máy tính xách tay. Đây không phải là một vấn đề; tác vụ chạy dài bị ràng buộc I / O, hoạt động thông qua các thứ trên đĩa cứng USB và không tốn nhiều RAM (<200 MB) hoặc CPU (<4%).
Vấn đề là khi tôi trở lại máy tính xách tay của mình sau vài giờ, nó sẽ rất chậm chạp và có thể mất 30 phút để trở lại bình thường. Điều này tệ đến mức các trình giám sát sự cố đánh dấu các ứng dụng tương ứng của chúng bị đóng băng (đặc biệt là các cửa sổ trình duyệt) và mọi thứ bắt đầu không chính xác.
Nhìn vào màn hình hệ thống, 2,5 GB được sử dụng khoảng một nửa được chuyển sang trao đổi. Tôi đã xác nhận đây là sự cố bằng cách xóa không gian hoán đổi ( swapoff /dev/sda8
). Nếu tôi để nó mà không có không gian hoán đổi, nó sẽ hoạt động trở lại gần như ngay lập tức ngay cả sau 24 giờ. Với trao đổi, thực tế nó là một viên gạch trong năm phút đầu tiên chỉ còn lại sáu giờ. Tôi đã xác nhận rằng mức sử dụng bộ nhớ không bao giờ vượt quá 3 GB ngay cả khi tôi đi vắng.
Tôi đã cố gắng giảm swappiness ( xem thêm: Wikipedia ) để giá trị của 10
và 0
, nhưng vấn đề vẫn còn tồn tại. Có vẻ như sau một ngày không hoạt động, hạt nhân tin rằng toàn bộ GUI không còn cần thiết nữa và xóa sạch nó khỏi RAM (hoán đổi nó sang đĩa). Nhiệm vụ chạy dài là đọc qua một cây tệp lớn và đọc mọi tệp. Vì vậy, nó có thể là kernel bị nhầm lẫn khi nghĩ rằng bộ nhớ đệm sẽ giúp. Nhưng trong một lần quét USB HD 2 TB với ~ 1 tỷ tên tệp, RAM GB thêm sẽ không giúp hiệu năng nhiều. Đây là một máy tính xách tay giá rẻ với ổ cứng chậm chạp. Nó chỉ đơn giản là không thể tải dữ liệu trở lại vào RAM đủ nhanh.
Làm thế nào tôi có thể bảo Linux chỉ sử dụng không gian hoán đổi trong trường hợp khẩn cấp? Tôi không muốn chạy mà không trao đổi. Nếu có điều gì đó bất ngờ xảy ra và HĐH đột nhiên cần thêm vài GB thì tôi không muốn các tác vụ bị giết và muốn bắt đầu sử dụng trao đổi. Nhưng hiện tại, nếu tôi bật tính năng trao đổi, máy tính xách tay của tôi không thể được sử dụng khi tôi cần.
Định nghĩa chính xác của "trường hợp khẩn cấp" có thể là vấn đề cần tranh luận. Nhưng để làm rõ ý tôi muốn nói: Trường hợp khẩn cấp sẽ là nơi hệ thống bị bỏ lại mà không có lựa chọn nào khác ngoài việc hoán đổi hoặc tiêu diệt các quá trình.
Trường hợp khẩn cấp là gì? - Bạn có thực sự phải hỏi không? ... Tôi hy vọng bạn không bao giờ thấy mình trong một tòa nhà đang cháy!
Tôi không thể định nghĩa mọi thứ có thể tạo thành trường hợp khẩn cấp trong câu hỏi này. Nhưng ví dụ, trường hợp khẩn cấp có thể là khi hạt nhân bị đẩy vào bộ nhớ đến mức nó đã bắt đầu giết các quá trình với OOM Killer . Trường hợp khẩn cấp KHÔNG phải là khi kernel nghĩ rằng nó có thể cải thiện hiệu suất bằng cách sử dụng trao đổi.
Chỉnh sửa cuối cùng: Tôi đã chấp nhận một câu trả lời thực hiện chính xác những gì tôi đã yêu cầu ở cấp hệ điều hành. Độc giả tương lai cũng nên lưu ý các câu trả lời cung cấp giải pháp cấp ứng dụng.