Dalam komentar, saya menyarankan Anda membuat cgroup, atur memory.swappinesske nol (untuk meminimalkan swapping) dan jalankan aplikasi Anda di dalamnya. Jika Anda melakukan itu, aplikasi Anda mungkin tidak akan bertukar kecuali Anda kehabisan memori fisik yang sangat rendah sehingga bertukar halaman untuk program-program dalam cgroup adalah satu-satunya cara untuk menyediakan cukup memori fisik.
Untuk melakukan ini di RHEL 6.5:
Pastikan libcgrouppaket diinstal. Ini memberi Anda akses ke alat userspace seperti cgcreatedan cgexec.
Mulai dan aktifkan cgconfiglayanan sehingga perubahan konfigurasi cgroup tetap ada di antara reboot. Pada RHEL layanan ini juga harus me-mount sistem file yang diperlukan di bawah /cgrouppohon.
Buat cgroup dengan cgcreate -g memory:thunderbird
Tetapkan swappiness ke nol di grup ini dengan cgset -r memory.swappiness=0 thunderbird
Gunakan cgsnapshot -s > /etc/cgconfig.confuntuk menyimpan konfigurasi persisten yang diperbarui untuk cgconfiglayanan (semua perubahan hingga kini telah menjadi perubahan runtime. Anda mungkin ingin menyimpan file konfigurasi default di suatu tempat dan memberikannya sekali lagi sebelum menjadikannya konfigurasi persisten.
Sekarang Anda dapat menggunakan cgexecuntuk memulai aplikasi yang diinginkan dalam thunderbirdcgroup:
[root @ xxx601 ~] # cgexec -g memory: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build stack test
[root @ xxx601 ~] #
Saya tidak thunderbirdmenginstal sebenarnya kalau tidak saya akan melakukan itu. Tidak yakin mengapa format di atas kacau.
Salah satu alternatif untuk cgexecmemulai thunderbird dan menambahkan PID ke tasksfile untuk aplikasi. Sebagai contoh:
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tugas
[root @ xxx601 ~] # pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601 ~] # echo 25926> / cgroup / memori / thunderbird / tugas
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tugas
25926
Sekali lagi, perlu disebutkan bahwa ini secara teknis tidak mencegah swapping tetapi kurang memodifikasi aplikasi itu sendiri, itu mungkin taruhan terbaik Anda. Saya baru saja menemukan memory.memsw.limit_in_bytesyang sepertinya merupakan kontrol yang lebih langsung untuk memaksa tidak ada pertukaran, tetapi saya belum bermain-main dengannya sehingga benar-benar merasa nyaman mengatakan bahwa itu memperbaiki masalah Anda sepenuhnya. Yang mengatakan, itu mungkin sesuatu yang harus diperhatikan setelah ini.
Jawaban sebenarnya adalah memiliki mlockinformasi sensitif aplikasi untuk mengatasi masalah semacam ini. Saya bersedia bertaruh aplikasi seperti Thunderbird, memang, tetapi saya tidak cukup tahu tentang internal untuk mengomentari itu.
cgexecthunderbird ke dalamnya. Anda masih memerlukan akses root, tetapi itu adalah resolusi tingkat admin. Jika Anda mengembangkan aplikasi Anda sendiri, Anda akan menggunakan mlock .