Nos comentários, sugeri que você crie um cgroup, defina memory.swappiness
como zero (para minimizar a troca) e execute seu aplicativo dentro dele. Se você fizesse isso, seu aplicativo provavelmente não seria trocado, a menos que você estivesse com uma memória física tão baixa que trocar páginas por programas nesse cgroup era a única maneira de disponibilizar memória física suficiente.
Para fazer isso no RHEL 6.5:
Verifique se o libcgroup
pacote está instalado. Isso lhe dá acesso a ferramentas de espaço do usuário como cgcreate
e cgexec
.
Inicie e ative o cgconfig
serviço para que as alterações na configuração do cgroup sejam persistentes entre as reinicializações. No RHEL, este serviço também deve montar os sistemas de arquivos necessários embaixo da /cgroup
árvore.
Crie o cgroup com cgcreate -g memory:thunderbird
Defina a troca como zero neste grupo com cgset -r memory.swappiness=0 thunderbird
Use cgsnapshot -s > /etc/cgconfig.conf
para salvar uma configuração persistente atualizada para o cgconfig
serviço (todas as alterações até agora foram de tempo de execução. Provavelmente, você desejará salvar o arquivo de configuração padrão em algum lugar e dar uma olhada novamente antes de fazer a configuração persistente.
Agora você pode usar cgexec
para iniciar os aplicativos desejados no thunderbird
cgroup:
[root @ xxx601 ~] # cgexec -g memória: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c teste de pilha ssl-build
[root @ xxx601 ~] #
thunderbird
Na verdade, eu não tenho instalado, caso contrário, eu teria feito isso. Não sei por que a formatação do texto acima está desarrumada.
Uma alternativa cgexec
seria iniciar o thunderbird e adicionar o PID ao tasks
arquivo do aplicativo. Por exemplo:
[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 ~] # eco 25926> / cgroup / memory / thunderbird / tasks
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tasks
25926
Mais uma vez, é importante mencionar que isso não impede tecnicamente a troca, mas, sem modificar o aplicativo em si, provavelmente é sua melhor aposta. Acabei de descobrir o memory.memsw.limit_in_bytes
que parece ser um controle mais direto em forçar a não troca, mas não brinquei com isso o suficiente para me sentir à vontade ao dizer que resolve o problema completamente. Dito isto, pode ser algo para investigar isso.
A resposta real seria ter as mlock
informações confidenciais do aplicativo para contornar esse tipo de preocupação. Estou disposto a apostar que um aplicativo como o Thunderbird faz isso, mas não sei o suficiente sobre os internos para comentar sobre isso.
cgexec
nele. Você ainda precisa de acesso root, mas essa é a resolução no nível do administrador. Se você estiver desenvolvendo seu próprio aplicativo, usaria o mlock .