У коментарях я запропонував вам створити групу, встановлену memory.swappiness
на нуль (щоб мінімізувати обмін) і запустити свою програму всередині цього. Якщо ви це зробили, ваша програма, ймовірно , не буде мінятися, якщо ви не працювали настільки неймовірно мало фізичної пам’яті, що заміна сторінок для програм цієї групи була єдиним способом зробити доступною достатню кількість фізичної пам’яті.
Для цього на RHEL 6.5:
Переконайтесь, що libcgroup
пакет встановлений. Це дає вам доступ до таких інструментів, як cgcreate
і cgexec
.
Запустіть і ввімкніть cgconfig
сервіс, щоб зміни в конфігурації групи існували між перезавантаженнями. На RHEL ця служба також повинна монтувати потрібні файлові системи під /cgroup
деревом.
Створіть групу за допомогою cgcreate -g memory:thunderbird
Встановіть свопість у нуль у цій групі за допомогою cgset -r memory.swappiness=0 thunderbird
Використовуйте cgsnapshot -s > /etc/cgconfig.conf
для збереження оновленої стійкої конфігурації для cgconfig
сервісу (усі зміни до цього часу були змінами часу виконання. Ви, ймовірно, захочете десь зберегти конфігураційний файл за замовчуванням і передати його ще раз, перш ніж зробити його стійкою конфігурацією.
Тепер ви можете використовувати cgexec
для запуску потрібних програм у thunderbird
групі:
[root @ xxx601 ~] # cgexec -g пам'ять: 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 ~] #
Я thunderbird
насправді не встановив інакше, я би це зробив. Не впевнений, чому форматування вищесказаного зіпсовано.
Однією з альтернатив cgexec
було б запустити thunderbird та додати PID до tasks
файлу програми. Наприклад:
[root @ xxx601 ~] # кіт / cgroup / memory / thunderbird / завдання
[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 / завдання
[root @ xxx601 ~] # кіт / cgroup / memory / thunderbird / завдання
25926
Знову ж таки, слід зазначити, що це технічно не заважає заміняти, але не потребує зміни самого додатка, це, мабуть, найкраща ставка. Щойно я виявив, memory.memsw.limit_in_bytes
що здається, що це може бути більш прямий контроль над примушенням до того, щоб не було заміни, але я не грав з цим достатньо, щоб справді почувати себе комфортно, кажучи, що він повністю вирішує вашу проблему. Це означає, що за цим можна було б доглянути.
Справжньою відповіддю було б мати mlock
інформацію, спричинену додатком, для подолання подібних проблем. Я готовий зробити ставку на таку програму, як Thunderbird, але це робить, але я не знаю достатньо про внутрішні організації, щоб прокоментувати це.
cgexec
громовідвід. Вам все ще потрібен кореневий доступ, але це дозвіл на рівні адміністратора. Якщо ви розробляєте власну програму, ви б використовували mlock .