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