Pergunta

Eu sei que este é provavelmente o canônica "Depende ..." pergunta, mas eu apreciaria qualquer ponteiros a respeito de onde começar a procurar.

Eu tenho um aplicativo cliente / servidor falando sobre ethernet. Em um computador que executa o servidor e um cliente e na outra apenas o cliente. Corre-se Vista e um corre XP. Depois de um uptime de cerca de 3 semanas inteiras o computador congela e obras nada, nem rato, não de teclado, nada -apenas desligar. A cada dez segundos, o servidor envia uma mensagem de ping para ver se os clientes estão vivos, além de que apenas algumas pequenas mensagens ir e voltar todos os dias.

Eu estou tentando descobrir se ele está me causando isso ou outra coisa. Eu comecei uma sessão e depois de alguns dias eu pensei que eu iria verificar para aumentos estranhas no uso de memória, mas para além de que tenho muito poucas ideias.

Foi útil?

Solução

Alguns pensamentos a considerar:

  1. Você sabe que o computador não responder, mas isso não significa que é pendurado. Será que responder a um ping?
  2. Talvez a luz de atividade do disco é ligado o tempo todo?
  3. Você diz "sem teclado?" - que quer dizer sem tampas bloquear ou luzes num lock
  4. Embora o aplicativo .NET pode ser o único que está em execução no momento, isso não implica que é a causa do problema. Algum trabalho de fundo poderia ser fazê-lo.

Por exemplo, eu aviso que Retrospect backup, quando é criar um instantâneo, congela o sistema inteiro por 10-15 minutos. Quer dizer, há Caps Lock, o relógio na barra de tarefas não é atualizado, não CTRL-ALT-DEL, não pode digitar em uma caixa de texto "Resposta" em SO, nada. Não tinha nada a ver com o que eu estava fazendo no momento, que estava respondendo a uma pergunta sobre SO.

Depois que ele voltou, SO perguntou se eu era um ser humano. Meus sentimentos foram feridos. ; -)

Outras dicas

Você pode anexar um depurador de kernel para o sistema operacional. Dessa forma, você deve ser capaz de inspecionar o estado do sistema operacional e seu processo mesmo que o OS é completamente indiferente. (Infelizmente, é muito mais difícil do que apenas bater "break" no VS. sugiro a leitura "Aplicações depuração para .NET e Windows" de John Robbin antes de tentar isso.)

Você também pode tentar criar despejos de memória de sua aplicação em intervalos regulares. Você pode ter que fazer um pouco de scripting para isso, no entanto. (Geralmente, você criar um despejo com um toque de tecla, usando uma ferramenta como userdump ou adplus, mas se o sistema operacional não está respondendo aos comandos das teclas, que não vai funcionar.) Dessa forma, você sabe o que indicar o seu processo está em durante ou logo antes de um travar. Esta página: http://blogs.msdn.com/debuggingtoolbox/default.aspx é um bom ponto de partida para a criação de scripts WinDbg. (Se você não sabe o que fazer com um despejo de memória, eu sugerem novamente excelente livro de John Robbin na depuração!)

Além disso, eu só posso pensar em truques de depuração padrão: o problema ocorre em cada PC? Isso acontece se não houver solicitações do cliente? Será que acontecer mais cedo se houver mais pedidos de clientes? Será que acontecer mais cedo se houver memória física menos disponível? Tente remover partes de sua aplicação (talvez em um servidor separado para testes) e ver se o problema ainda ocorre, e assim por diante. Tente executá-lo em uma máquina virtual para que você possa ver se ele usa a CPU, disco rígido ou rede durante esses "trava".

Isto não vai ser o resposta, mas eu aconselho a começar por verificar os logs de eventos de sistema operacional e executando um perfmon para manter o controle de memória, uso de CPU, etc

congela computador, que, o servidor ou cliente? E o que SOs eles estão correndo, respectivamente?

Como Daniel L observou, laços eleitorais apertados pode realmente matar o CPU. Se você pode, alterar o código para manipuladores de uso de eventos, é uma solução muito mais robusta.

Finalmente, você está certo de que não há um problema de hardware no computador congelamento?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top