Nos comentários, sugeri que você criasse um cgroup, definisse memory.swappiness
para zero (para minimizar a troca) e executasse seu aplicativo dentro dele. Se você fez isso, provavelmente o seu aplicativo não iria trocar a menos que você estivesse rodando tão incrivelmente baixo na memória física que a troca de páginas por programas naquele cgroup era a única maneira de disponibilizar memória física suficiente.
Para fazer isso no RHEL 6.5:
-
Verifique se o pacote
libcgroup
está instalado. Isso lhe dá acesso a ferramentas de espaço do usuário comocgcreate
ecgexec
. -
Inicie e ative o serviço
cgconfig
para que as alterações na configuração do cgroup sejam persistentes entre as reinicializações. No RHEL, esse serviço também deve montar os sistemas de arquivos necessários sob a árvore/cgroup
. -
Crie o cgroup com
cgcreate -g memory:thunderbird
-
Defina a permutação para 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 serviçocgconfig
(todas as alterações até agora foram alterações de tempo de execução. Você provavelmente desejará salvar o arquivo de configuração padrão em algum lugar e fornecer uma vez -over antes de fazer a configuração persistente. -
Agora você pode usar
cgexec
para iniciar os aplicativos desejados nothunderbird
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 dormir sleep.c ssl-build teste de pilha
[root @ xxx601 ~] #
Eu não tenho thunderbird
na verdade, caso contrário eu teria feito isso. Não sei por que a formatação dos itens acima está confusa.
-
Uma alternativa para
cgexec
seria iniciar o thunderbird e adicionar o PID ao arquivotasks
do aplicativo. Por exemplo:[root @ xxx601 ~] # cat / cgroup / memória / thunderbird / tarefas
[root @ xxx601 ~] # pidof httpd
< p > 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 / memória / thunderbird / tarefas
25926
Mais uma vez, vale a pena mencionar que isso não impede tecnicamente a troca, mas a modificação do aplicativo em si, provavelmente é sua melhor aposta. Acabei de encontrar memory.memsw.limit_in_bytes
, o que parece ser um controle mais direto sobre forçar que não haja troca, mas eu não brinquei o suficiente para realmente me sentir confortável dizendo que corrige seu problema completamente. Dito isso, pode ser algo para investigar depois disso.
A verdadeira resposta seria ter o aplicativo mlock
de informações confidenciais para contornar esse tipo de preocupação. Estou disposto a apostar uma aplicação como o Thunderbird, mas não sei o suficiente sobre os internos para comentar sobre isso.