Como evitar tantas instâncias da execução do apt-check?
18
Eu tenho um servidor Ubuntu 12.04 que travou por causa de uma causa muito óbvia: mais de 30 apt-checkprocessos consumindo toda a memória, o assassino do OOM entrando em ação, matando serviços vitais. Não sei de onde apt-checkvêm os processos, mas acho que meus plugins Nagios / Icinga check_aptpodem usá-lo, assim como a byobulinha de status pode exibir sua saída. Acho que algo trancou e todos os processos estavam apenas esperando, ainda mantendo memória.
Como posso evitar ter tantas instâncias apt-checkno sistema? Não faz sentido para mim e deve sair assim que não conseguir um bloqueio de leitura no banco de dados do dpkg.
Parece que não sou o único a ter problemas aqui. Todas as sugestões para apt-checksão bastante negativas:
(navegador limpo, sem login, sem pesquisa personalizada)
Alguns apt-checkme deram essas pistas por ser um roteiro muito contundente que precisa ser consertado. Com todo o respeito aos autores, está falhando nos meus servidores. Aqui estão os meus pensamentos:
A combinação dos dois últimos permite que ele se acumule indefinidamente em uma espiral descendente. Se o sistema for usado para outros propósitos com maior prioridade, a quantidade de processos aumentará e não haverá fim, pois apt-checknunca haverá prioridade sobre ele. Os problemas só pioram quando o assassino da OOM decide matar os processos vitais do sistema.
Se qualquer um desses dois aspectos no comportamento fosse diferente, minha hipótese não permitiria que o sistema terminasse em um estado tão quebrado.
Embora o strings esteja certo quanto aos processos-pai serem responsáveis por isso também, acredito que os pontos abaixo são falhas apt-checke precisam ser relatados como um bug para serem resolvidos corretamente:
ele deve sair se levar um tempo razoável para obter informações
Na verdade, parece que o assassino do Linux OOM está fazendo alguma heurística nisso. Os processos Niced obterão uma pontuação aumentada e os processos de execução longa serão diminuídos. ( fonte - graças a Ulrich Dangel por apontar )
Possível solução que posso propor:
resultados do cache após o processamento
cache de saída se for menor que N quantidade de segundos sem carregar todas as bibliotecas Python-APT para cada --helpchamada simples (par ).
torne o nicelevel configurável - Permita-me alterar / desativar isso, por favor! Acredito que defini-lo como 0 realmente ajudará
Acho que você perdeu a maior coisa que deve fazer: use um arquivo de bloqueio e não permita que mais de uma instância seja executada ao mesmo tempo.
derobert
@derobert É um script que qualquer usuário pode executar, sem privilégios específicos no Ubuntu, não um daemon. Ou posso usar /var/run/ /tmppara esse arquivo de bloqueio legível por todo o mundo / gravável com segurança? Grande buraco: adicione o arquivo de bloqueio e o administrador não será notificado sobre atualizações do sistema!
precisa saber é o seguinte
Tudo o que está sendo iniciado automaticamente (levando a mais de 30 cópias em execução) precisa fazer o bloqueio. Ou poderia fazer isso sozinho, por usuário. De qualquer forma, é um bug que precisa ser resolvido.
derobert
Nagios / Icinga parece evitar a armadilha. Pelo menos, teve um intervalo de 10 segundos e avisou se era excedido. (Embora não encontre como configurar o tempo limite - prefiro mais). Byobu no Debian é o que causou o problema para mim; no Ubuntu, deveria ser corrigido .
sourcejedi
4
Você precisa descobrir qual processo está gerando o apt-check. você pode usar algo como ps para obter a árvore do processo.
ps -A --forest
Se o apt-check não tiver pais, pode ser um problema com o apt-check e não em um programa específico. se for esse o caso, eu tentaria depurar o apt-check.
Obrigado. Deu-me algumas ideias para aprofundar. No entanto, isso me levou a acreditar que é apt-checkrealmente um problema - veja minha própria resposta .
precisa saber é o seguinte
Se está consumindo memória e tempo de CPU, não é um zumbi.
Gilles 'SO- stop be evil'
@Gilles bom ponto.
strings
0
Base escrita no Ubuntu 12.04
Eu tenho o mesmo problema e descobri que é por causa disso byobu, se eu simplesmente apt-get updatenão estiver usando byobu, não haverá check-aptprocesso. Além disso, ele se relaciona com update-notifiero pacote, quando eu removi os pacotes (update-notifer-comum, update-notifier), usando byobue correr apt-get update, ele correu um outro comando, mas bastante a mesma memória usando: apt-get -s -o Debug::NoLocking=true upgrade.
Algumas outras coisas podem ser executadas apt-get update(mas provavelmente não são executadas check-apt)
passando o argumento para check_aptatualizar / atualizar o pkg.
Em uma área de trabalho, há mais coisas envolvidas.
Concluir:
byobucaptura o evento quando você executa apt-get updatee aciona esses check-aptprocessos, reconfigure a barra de status byobupara corrigir isso.
/var/run
//tmp
para esse arquivo de bloqueio legível por todo o mundo / gravável com segurança? Grande buraco: adicione o arquivo de bloqueio e o administrador não será notificado sobre atualizações do sistema!Você precisa descobrir qual processo está gerando o apt-check. você pode usar algo como ps para obter a árvore do processo.
Se o apt-check não tiver pais, pode ser um problema com o apt-check e não em um programa específico. se for esse o caso, eu tentaria depurar o apt-check.
fonte
apt-check
realmente um problema - veja minha própria resposta .Base escrita no Ubuntu 12.04
Eu tenho o mesmo problema e descobri que é por causa disso
byobu
, se eu simplesmenteapt-get update
não estiver usandobyobu
, não haverácheck-apt
processo. Além disso, ele se relaciona comupdate-notifier
o pacote, quando eu removi os pacotes (update-notifer-comum, update-notifier), usandobyobu
e correrapt-get update
, ele correu um outro comando, mas bastante a mesma memória usando:apt-get -s -o Debug::NoLocking=true upgrade
.Algumas outras coisas podem ser executadas
apt-get update
(mas provavelmente não são executadascheck-apt
)check_apt
atualizar / atualizar o pkg./etc/cron.daily/apt
pode atualizar a lista de pacotes (consulte https://help.ubuntu.com/lts/serverguide/automatic-updates.html ), mas é executado apenas uma vez por dia e não deve ser problema.Em uma área de trabalho, há mais coisas envolvidas.
Concluir:
byobu
captura o evento quando você executaapt-get update
e aciona essescheck-apt
processos, reconfigure a barra de statusbyobu
para corrigir isso.fonte