У коментарях я запропонував вам створити групу, встановлену 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 .