processos defuntos permanecem para trás

1

Eu tenho um sistema embarcado que não respondia depois de várias horas de execução. Após investigar, descobri que o sistema mantinha uma lista de <defunct> de processos. A execução de ps axl fornece uma lista longa de um snippet, como segue:

1     0  6421     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>
1     0  6429     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>
1     0  6476     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>
1     0  6497     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>

Eu não sou capaz de matar esses processos. O aumento desses processos consome toda a RAM, tornando o sistema sem resposta. A outra questão é que os processos que são executados no momento da inicialização pelos scripts init também são <defunct> quando eu tentar matá-los. Eu não sou capaz de achar uma pista de por que esses processos de zumbis não são mortos pelo init e devoram RAM.

    
por arshan 26.03.2016 / 11:06

4 respostas

0

A causa raiz do problema foi o hardware defeituoso. ttyS1 port do sistema estava recebendo milhares de interrupções por segundo, o que, por sua vez, resultou em alto uso da CPU em kworker . Isso causou a criação do heap de <defucnt> processos e não foi limpo por init . Isso pode ser um bug de init como sugerido por @jilliagre.

Desativar getty em ttyS1 resolveu o problema.

    
por 02.04.2016 / 08:24
3

Processos extintos não comem nenhum RAM significativo, apenas um punhado de bytes para armazenar seu pid, status de retorno e estatísticas de uso de recursos.

No entanto, processos defuntos criados pelo init devem ser rapidamente obtidos pelo último em um sistema operacional Unix / Linux funcionando corretamente.

Existe, então, um grave bug com o seu sistema, o que também pode explicar o vazamento de memória que você está observando.

    
por 26.03.2016 / 11:26
1

Como outros, eu duvido que esses processos defuntos usem qualquer valor significativo de RAM, você também pode ver na ps de saída que você deu, que existem zeros nas colunas que detalham o uso de memória.

Os processos Defnct (ou zumbis - de onde o Z vem) não podem ser eliminados, apenas permanecem na tabela de processos até que seus pais leiam seus status de saída - então você deve corrigir o pai.

    
por 26.03.2016 / 11:29
0

Encontre zumbis usando #ps auxwww | grep -w Z | grep defunct | grep -v grep

Verifique os ids do processo pai desses zumbis e Mate-os.

    
por 02.04.2016 / 08:36