Falha no kernel do Linux: como reunir informações?

0

Estou desenvolvendo um aplicativo node.js --- que freqüentemente trava meu kernel Linux da Debian: O computador não responde e nem responde a 'ping'.

Nesta fase, nem sequer peço para analisar ou corrigir a causa das falhas. Eu não tenho nenhuma informação que possa apontar para algo específico. O computador simplesmente pára de responder, nem /var/log/messages nem dmesg mostram nenhuma mensagem.

Então, minha pergunta é: Quais ferramentas posso usar para coletar algumas informações sobre as falhas?

Aqui estão alguns detalhes do histórico:

Meu aplicativo node.js não usa a pilha de rede. Ele apenas gera dois subprocessos com child_process.spawn e se comunica com eles por meio da gravação de arquivos, observando as alterações de arquivos com fs.watch e lendo os arquivos que foram alterados. O resto é apenas processamento de dados.

Eu testei esse problema em três computadores:

  • No primeiro (minha máquina principal de desenvolvimento), o sistema congela de forma confiável após iniciar este aplicativo algumas vezes.
  • Nos outros computadores (um PC semelhante à máquina principal e um VPS digital), o aplicativo geralmente funciona bem - mas depois de algumas centenas de execuções, ele congelou os outros computadores.

Parece que minha máquina de desenvolvimento principal é mais propensa a esse problema - mas como os congelamentos também acontecem em duas máquinas não relacionadas, presumo que não seja um problema puro de hardware restrito a um PC.

Como o computador congela imediatamente após o início do aplicativo, tenho certeza de que o aplicativo causa esse problema. E como tudo pára (incluindo respostas a pings), presumo que o kernel do Linux tenha falhado.

    
por Yaakov Belch 29.07.2015 / 17:27

1 resposta

2

Normalmente, uma falha no kernel do Linux seria visível no console do sistema. No entanto, apenas no caso de ser realmente uma falha do kernel, mas no seu caso, não é visível por qualquer motivo que você queira confirmar se é realmente uma falha do kernel. Para isso, você poderia configurar seu sistema para reinicialização automática após uma pane do kernel assim: Configure a reinicialização no pânico do kernel do Linux . Se o sistema acabar reinicializando, então é realmente uma pane no kernel e então você pode se concentrar no caminho de investigação (muitas respostas relacionadas em sites de troca de pilha).

Mas a partir da sua descrição eu acho que é mais provável que seja uma condição pendente do kernel ou "muito ocupada", você poderia começar aqui: Como investigar a causa do travamento total? .

Finalmente, como você observou que a causa-raiz parece ser mais provável de ser seu aplicativo, eu suponho que, de alguma forma, isso está sobrecarregando o sistema, fazendo com que ele pare de responder. Você poderia revisar seu código para qualquer loop longo / infinito e tentar limitar seu impacto: quebrar após um certo tempo de execução (talvez use algumas exceções de tempo limite) ou após um certo número de iterações, etc. Se o sistema tornar-se responsivo novamente após um enquanto então você teria uma idéia melhor de qual área do seu código é a culpa e talvez como isso afeta o sistema.

    
por 29.07.2015 / 18:47