Trong các bình luận, tôi đề nghị bạn tạo một nhóm, đặt memory.swappiness
thành không (để giảm thiểu trao đổi) và chạy ứng dụng của bạn bên trong đó. Nếu bạn đã làm điều đó, ứng dụng của bạn có thể sẽ không trao đổi trừ khi bạn đang sử dụng bộ nhớ vật lý cực kỳ thấp, việc hoán đổi các trang cho các chương trình trong nhóm đó là cách duy nhất để cung cấp đủ bộ nhớ vật lý.
Để làm điều này trên RHEL 6.5:
Đảm bảo libcgroup
gói được cài đặt. Điều này cho phép bạn truy cập vào các công cụ không gian người dùng như cgcreate
và cgexec
.
Bắt đầu và kích hoạt cgconfig
dịch vụ để các thay đổi về cấu hình cgroup được duy trì giữa các lần khởi động lại. Trên RHEL, dịch vụ này cũng sẽ gắn các hệ thống tập tin cần thiết bên dưới /cgroup
cây.
Tạo nhóm với cgcreate -g memory:thunderbird
Đặt swappiness thành 0 trong nhóm này với cgset -r memory.swappiness=0 thunderbird
Sử dụng cgsnapshot -s > /etc/cgconfig.conf
để lưu cấu hình liên tục được cập nhật cho cgconfig
dịch vụ (tất cả các thay đổi cho đến nay là thay đổi thời gian chạy. Bạn có thể muốn lưu tệp cấu hình mặc định ở đâu đó và cung cấp cho nó một lần nữa trước khi đặt cấu hình liên tục.
Bây giờ bạn có thể sử dụng cgexec
để bắt đầu các ứng dụng mong muốn trong nhóm thunderbird
:
[root @ xxx601 ~] # cgexec -g bộ nhớ: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp ngủ ngủ.c ssl-build stack test
[root @ xxx601 ~] #
Tôi đã không thunderbird
thực sự cài đặt nếu không tôi sẽ làm điều đó. Không chắc chắn tại sao định dạng của ở trên bị rối tung.
Một cách khác cgexec
là bắt đầu thunderbird và thêm PID vào tasks
tệp cho ứng dụng. Ví dụ:
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tác vụ
[root @ xxx601 ~] # pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601 ~] # echo 25926> / cgroup / memory / thunderbird / task
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tác vụ
25926
Một lần nữa, gấu đề cập rằng điều này về mặt kỹ thuật không ngăn cản việc hoán đổi nhưng thiếu sửa đổi chính ứng dụng, đây có lẽ là lựa chọn tốt nhất của bạn. Bây giờ tôi mới thấy memory.memsw.limit_in_bytes
có vẻ như đó có thể là một sự kiểm soát trực tiếp hơn khi buộc không có sự hoán đổi nhưng tôi đã không chơi với nó đủ để thực sự cảm thấy thoải mái khi nói rằng nó khắc phục hoàn toàn vấn đề của bạn. Điều đó nói rằng, nó có thể là một cái gì đó để xem xét sau này.
Câu trả lời thực sự là có mlock
thông tin nhạy cảm của ứng dụng để giải quyết vấn đề này. Mặc dù vậy, tôi sẵn sàng đặt cược một ứng dụng như Thunderbird, nhưng tôi không biết đủ về nội bộ để nhận xét về điều đó.
cgexec
thunderbird vào đó. Bạn vẫn cần quyền truy cập root, nhưng đó là độ phân giải cấp quản trị viên. Nếu bạn đang phát triển ứng dụng của riêng mình, bạn sẽ sử dụng mlock .