Comando que levará um 'instantâneo do sistema' de um sistema linux para posterior diagnóstico?

2

Estou executando um servidor Ubuntu Linux com Apache, wsgi, django e mysql nele. Recentemente, algo aconteceu e os processos wsgi froze. Reiniciar o apache resolveu o problema. Como acontece com muitos sistemas ativos, é melhor fazer o sistema voltar a funcionar em vez de procurar. No entanto, estamos tendo problemas para diagnosticar o problema, pois tudo parecia bem e não sabemos o estado completo do problema agora.

Existe alguma ferramenta / comando (no linux / debian / ubuntu (ou qualquer outro sabor * nix, estou bem com a compilação de qualquer comando)) que, quando invocado, irá gravar em um arquivo alguns detalhes sobre o estado de o sistema como é agora? Se / Quando isso acontecer novamente, podemos apenas executar este comando, depois começar a lutar contra alguns incêndios (reiniciando o apache / o servidor etc.) e, mais tarde, podemos tentar diagnosticar o problema.

Lista de desejos das coisas que gravaria:

  • status da CPU (e vários tipos)
  • lista de processos & vários detalhados
  • Detalhes do uso do sistema de arquivos
  • Lista de todos os arquivos abertos (e qual processo os possui, etc.)
  • Lista de todas as conexões de internet abertas
  • (Se possível) Detalhes do que nossos processos mod_wsgi estão fazendo
  • status do MySQL: consultas atuais que estão sendo executadas, etc.
  • (talvez) execute strace em apache / mysql / mod_wsgi por alguns segundos para coletar alguns dados do que eles estão fazendo e salve isso em um arquivo.
  • Algo mais que eu estou esquecendo?

Em teoria, esse é um conjunto simples de comandos e, se ninguém mais fez isso, escreveremos nossos próprios scripts, mas seria melhor se pudéssemos usar uma ferramenta adequada.

    
por Rory 22.12.2011 / 19:08

2 respostas

3

O trabalho está sendo feito no mod_wsgi 4.0 para melhor se recuperar do problema em que todos os threads de solicitação do WSGI bloqueiam algo, o que acabará por ser a causa disso. Como isso, então, leva ao Apache como um bloqueio inteiro e porque você não pode obter qualquer logout do Apache sobre isso é principalmente entendido.

Como parte do novo mecanismo de recuperação que foi implementado, o mod_wsgi antes de reiniciar o processo do daemon bloqueado tentará registrar um rastreio mínimo de pilha de cada thread de requisição WSGI para que você possa ver onde o código foi bloqueado.

Também há trabalho em andamento com rastreamento e relatório de utilização de encadeamentos para que você possa saber quando os encadeamentos de solicitação estão começando a bloquear em seu código por algum motivo. Esses dados poderão ser relatados em uma ferramenta como o New Relic, para que você possa fazer o gráfico e analisá-los em conjunto com todas as outras informações sobre solicitações da Web que o agente do New Relic Python captura sobre seu aplicativo.

A New Relic também tem monitoramento de servidores, para que possa rastrear uma quantidade razoável de informações sobre o sistema como um todo, atividade de disco, atividade de rede, CPU, processos etc. etc. Assim, como um todo, a New Relic é uma possível opção para monitorar seu sistema.

No geral, com o tempo, muito trabalho está sendo feito para tentar fazer com que o mod_wsgi seja mais fácil de monitorar e recuperar automaticamente quando seu aplicativo começa a travar por um motivo ou outro.

Você pode considerar entrar na lista de discussão mod_wsgi e procurar por postagens sobre isso, ou fazer perguntas específicas sobre o que você possa ter na lista de discussão.

    
por 22.12.2011 / 23:11
1

Em geral, espero que meu sistema de monitoramento detecte as condições que podem levar ou provocar uma falha. Ter algum tipo de solução de monitoramento baseada em histórico ajudaria a identificar tendências. Orca , Cactos , Munin ... todos eles funcionam bem para isso, se for um sistema independente.

No lado do Red Hat / CentOS / Fedora, temos o utilitário sosreport , que coleta informações detalhadas de hardware e processo.

Já que você está no Ubuntu, isso não está disponível. Eu acho que você pode usar Apport para alguns bits (se você pode amarrar em seu aplicativo), mas tudo o mais pode ser uma combinação de utilitários : dmesg, dpkg, lshw, udevadm, dmidecode ...

    
por 22.12.2011 / 19:38