Como eu uso oom_score_adj?

15

Em 11.04, /proc/[pid] contém oom_score_adj , mas man proc descreve o antigo oom_adj . Eu pesquisei sem sucesso por qualquer informação sobre como usar isso.

O que eu preciso arranjar é que os processos iniciados por 'pbs' ou 'gridengine' sejam mortos antes que qualquer outra coisa seja morta. Como posso fazer isso?

    
por bmargulies 09.09.2011 / 14:16

4 respostas

11

Com base no meu próprio Q & amp; A no Unix & Linux sobre uma pergunta semelhante.

Como Stuart apontou muito bem em sua resposta , os valores válidos são inteiros no intervalo de -1000 a 1000 para %código%. O menor valor, o menor a chance de ser morto.

É muito inconveniente ter que alterar esse valor várias vezes quando você reiniciar o aplicativo. A informação é simplesmente perdida após o processo ter terminado. Upstart (o daemon de inicialização no Ubuntu), tem uma boa opção para configurar para daemons para ter certeza de que está definido sempre que tiver (re) iniciado:

  

oom_score_adj

     

[...] recorte [...]

     

Exemplo:

# this application is a "resource hog"
oom score 1000

expect daemon
respawn
exec /usr/bin/leaky-app

Então, basicamente, você pode editar o arquivo de configuração oom score para os serviços que você deseja alterar, para incluir uma linha /etc/init/myservice.conf . Eu suponho que os serviços 'pbs' ou 'gridengine' que você está falando em sua pergunta é habilitado para Upstart, caso contrário, você precisará de outra maneira de alterar isso permanentemente.

    
por gertvdijk 01.02.2013 / 15:36
5

Se você definir um valor alto (ish) para oom_adj ou oom_score_adj, eles serão mortos primeiro. por exemplo,

echo 15 > /proc/[pid]/oom_adj

oom_adj vai de -16 a 15 e como mencionado acima oom_score_adj aceita -1000 a 1000

    
por Stuart 31.01.2013 / 21:03
4

Examinar o código é sempre uma boa ideia. Normalmente eu uso a função de pesquisa do kernel.org, mas atualmente está desativada. O Github também faz um bom trabalho. Eu encontrei isto:

  

Em vez disso, um novo sintonizador   / proc / pid / oom_score_adj, é adicionado que varia de -1000 a +1000. Pode   ser usado para polarizar a heurística de tal forma que certas tarefas nunca são   considerado para oom kill, enquanto outros podem sempre ser considerados. O valor que   é adicionado diretamente na pontuação badness (), então um valor de -500, para   exemplo, significa descontar 50% do seu consumo de memória em comparação   outras tarefas no sistema, ligadas à mempolicy, no cpuset,   ou compartilhando o mesmo controlador de memória.

De link

    
por falstaff 09.09.2011 / 14:36
4

Se você puder modificar o script inicial gerando o processo que deseja priorizar para oom-killer, adicione o seguinte ao script de início:

echo 1000 > /proc/self/oom_score_adj

O valor é herdado para processos filhos.

    
por user1338062 26.05.2015 / 13:08