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:

insira a descrição da imagem aqui

(navegador limpo, sem login, sem pesquisa personalizada)

gertvdijk
fonte

Respostas:

8

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:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • força o nicelevel 19 para si
  • nenhum tempo limite definido nas ações

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:

  • deve sugerir ao assassino da OOM que ele próprio seja morto primeiro
  • não deve definir o código de nível de código fixo
  • 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á
  • tê-lo aumentar a pontuação assassino OOM
gertvdijk
fonte
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.

cordas
fonte
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)

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.

HVNSweeting
fonte