Executando alguns servidores Linux com um ou apenas alguns daemons vitais de serviço do sistema, eu gostaria de ajustar o OOM killer para esses processos daemonizados, caso algo estranho aconteça. Por exemplo, hoje algum servidor Ubuntu executando o MySQL tem um daemon MySQL morto por causa de toneladas de apt-checker
processos foram consumindo toda a memória eo kernel pensei que era uma boa idéia para matar o MySQL.
Eu sei que posso ajustar a pontuação usando o /proc/$(pidof mysqld)/oom_score_adj
arquivo para dar ao kernel alguma pista de que eu não prefiro que o MySQL seja morto, mas isso não sobrevive ao reinício do serviço. Devo editar scripts init / upstart do pacote para incluir esses ajustes? Não acho que seja uma solução muito elegante, pois faria ajustes nos arquivos pertencentes a um pacote. Seria possível conectar-se a scripts upstart / init em geral e ajustá-lo condicionalmente? Ou você sugeriria executar um script indefinido como while true{ adjust_oom(); sleep 60;}
?
fonte
Respostas:
Vários sistemas modernos de supervisão de daemon têm meios para fazer isso. (De fato, como existe uma ferramenta de carregamento em cadeia para o trabalho, sem dúvida todos eles têm um meio para fazer isso.)
oom score
no arquivo de trabalho.OOMScoreAdjust=
configuração na unidade de serviço. Você pode usar os arquivos de correção da unidade de serviço para afetar as unidades de serviço pré-empacotadas.oom-kill-protect
ferramenta do conjunto de ferramentas nosh norun
programa para o serviço.Se você estiver convertendo uma unidade de serviço do sistema, a
Como bônus, você pode torná-lo parametrizável: e defina o valor do parâmetro no ambiente do serviço (presume-se que seja lido a partir de um ambiente associado ao serviço, aqui manipulado com oconvert-systemd-units
ferramenta de fato converterá aOOMScoreAdjust=
configuração em uma chamada deoom-kill-protect
.rcctl
calço do conjunto de ferramentas nosh ):Leitura adicional
oom-kill-protect
. conjunto de ferramentas nosh. Programas.oom score
" Livro de receitas inicial .OOMScoreAdjust
"systemd.exec
. páginas de manual do systemd. freedesktop.org.rcctl
. conjunto de ferramentas nosh. Programas.fonte
Isso é possível no Ubuntu usando o Upstart e a
oom score
opção de configuração.fonte
Você pode invadir o MySQL (por exemplo, o OpenSSH
sshd
faz isso), mas isso é um pouco pesado e muito sujo (problemas com atualizações etc.)Você pode fazer isso em um wrapper ou no script init - a pontuação deve ser herdada (e em um wrapper que você provavelmente desejaria
exec mysqld "$@"
qualquer maneira).Uso
cgroups
- isso lhe dará um pouco mais de flexibilidade e pode ser permanente, no sentido de que as configurações apropriadas possam ser aplicadas automaticamente na reinicialização do serviço. Veja, por exemplo, controle de prioridade de aplicativos usando cgroups para obter mais informações. Para alcançar o automatismo que você está procurando, provavelmente você desejará dar uma olhada no libcgroup , que contém um daemon que pode lidar com a mudança de cgroups de um processo em execução de acordo com um conjunto de regras, ou apenas usar ocgexec
wrapper ( do mesmo pacote).fonte