Dalam komentar, saya menyarankan Anda membuat cgroup, atur memory.swappiness
ke 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 libcgroup
paket diinstal. Ini memberi Anda akses ke alat userspace seperti cgcreate
dan cgexec
.
Mulai dan aktifkan cgconfig
layanan sehingga perubahan konfigurasi cgroup tetap ada di antara reboot. Pada RHEL layanan ini juga harus me-mount sistem file yang diperlukan di bawah /cgroup
pohon.
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.conf
untuk menyimpan konfigurasi persisten yang diperbarui untuk cgconfig
layanan (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 cgexec
untuk memulai aplikasi yang diinginkan dalam thunderbird
cgroup:
[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 thunderbird
menginstal sebenarnya kalau tidak saya akan melakukan itu. Tidak yakin mengapa format di atas kacau.
Salah satu alternatif untuk cgexec
memulai thunderbird dan menambahkan PID ke tasks
file 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_bytes
yang 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 mlock
informasi sensitif aplikasi untuk mengatasi masalah semacam ini. Saya bersedia bertaruh aplikasi seperti Thunderbird, memang, tetapi saya tidak cukup tahu tentang internal untuk mengomentari itu.
cgexec
thunderbird ke dalamnya. Anda masih memerlukan akses root, tetapi itu adalah resolusi tingkat admin. Jika Anda mengembangkan aplikasi Anda sendiri, Anda akan menggunakan mlock .