Como definir o “oom_score_adj” quando (antes) executar o programa alvo?

2

Definido diretamente por echo 1000 >/proc/<pid>/oom_score_adj não é confiável porque o programa de destino já está em execução; nesse caso, talvez o programa de destino tenha causado a OOM antes de echo 1000 >/proc/<pid>/oom_score_adj

    
por illiterate 07.12.2017 / 09:14

2 respostas

2

oom_score_adj é herdado no fork, portanto, você pode definir seu valor inicial para novos filhos definindo o valor desejado no processo pai.

Assim, se você está começando o alvo de um script de shell,

echo 1000 > /proc/$$/oom_score_adj

mudará o valor do shell para 1000, e qualquer processo posteriormente bifurcado pelo shell começará com oom_score_adj definido como 1000.

    
por 07.12.2017 / 10:16
0

Como uma alternativa para configurá-lo no processo pai, como na resposta de M. Kitt, é possível configurá-lo no processo filho após a bifurcação executando o programa no processo filho por meio de uma ferramenta de carregamento de cadeia que impõe a configuração em si e, em seguida, simplesmente cadeia carrega o programa alvo.

Eu escrevi um desses utilitários para o tools tool em 2016, que conhece os mecanismos para ambos os sistemas operacionais Linux e FreeBSD / TrueOS.

oom-kill-protect -- 1000 target-program some-arguments

O -- está lá quando alguém decide adaptar isso para usar uma pontuação OOM negativa. ☺

Leitura adicional

por 07.12.2017 / 12:48