Domanda

So che questo è probabilmente il "canonico" Dipende ... " domanda ma apprezzerei qualsiasi suggerimento su dove iniziare a cercare.

Ho un'app client / server che comunica su Ethernet. In un computer eseguo il server e un client e su un altro solo il client. Uno esegue Vista e uno esegue XP. Dopo un tempo di attività di circa 3 settimane, l'intero computer si blocca e non funziona nulla, non il mouse, non la tastiera, niente, basta spegnere. Ogni dieci secondi il server invia un messaggio ping per vedere se i client sono attivi, a parte il fatto che solo pochi piccoli messaggi vanno avanti e indietro ogni giorno.

Sto cercando di scoprire se sono io a causarlo o qualcos'altro. Ho iniziato una sessione e dopo alcuni giorni ho pensato di verificare la presenza di strani aumenti nell'uso della memoria, ma oltre a ciò ho pochissime idee.

È stato utile?

Soluzione

Alcuni pensieri da considerare:

  1. Sai che il computer non risponde, ma ciò non significa che sia bloccato. Risponde a un ping?
  2. Forse la spia di attività del disco è sempre accesa?
  3. Dici " nessuna tastiera " - vuoi dire nessuna spia bloc maiusc o bloc num?
  4. Sebbene l'applicazione .NET possa essere l'unica in esecuzione al momento, ciò non implica che sia la causa del problema. Qualche lavoro in background potrebbe farlo.

Ad esempio, noto che il backup di Retrospect, durante la creazione di un'istantanea, blocca l'intero sistema per 10-15 minuti. Voglio dire, nessun blocco maiuscole, l'orologio nella barra delle attività non si aggiorna, nessun CTRL-ALT-CANC, non è possibile digitare in un " Risposta " casella di testo in SO, niente. Non aveva nulla a che fare con quello che stavo facendo in quel momento, che stava rispondendo a una domanda su SO.

Dopo che è tornato, SO mi ha chiesto se fossi un essere umano. I miei sentimenti erano feriti. ; -)

Altri suggerimenti

È possibile collegare un debugger del kernel al sistema operativo. In questo modo dovresti essere in grado di ispezionare lo stato del sistema operativo e il tuo processo anche se il sistema operativo non risponde completamente. (Sfortunatamente, è molto più difficile che colpire semplicemente "rompere" in VS. Suggerisco di leggere "Debugging Applications per .NET e Windows" di John Robbin prima di provarlo.)

Puoi anche provare a creare dump di memoria della tua applicazione a intervalli regolari. Tuttavia, potresti dover fare un po 'di scripting per questo. (di solito, crei un dump con una sequenza di tasti, utilizzando uno strumento come userdump o adplus, ma se il sistema operativo non risponde alle sequenze di tasti, ciò non funzionerà.) In questo modo, sai in quale stato si trova il tuo processo durante o poco prima di un blocco. Questa pagina: http://blogs.msdn.com/debuggingtoolbox/default.aspx è un buon punto di partenza per lo scripting di WinDbg. (Se non sai cosa fare con un dump della memoria, suggerirei ancora l'ottimo libro di John Robbin sul debug!)

A parte questo, posso solo pensare a trucchi di debug standard: il problema si verifica su ogni PC? Succede se non ci sono richieste client? Accade prima se ci sono più richieste del cliente? Accade prima se c'è meno memoria fisica disponibile? Prova a rimuovere parti dell'applicazione (magari su un server separato per i test) e verifica se il problema persiste, e così via. Prova a eseguirlo in una macchina virtuale in modo da poter vedere se utilizza la CPU, il disco rigido o la rete durante questi "blocchi".

Questa non sarà la risposta , ma ti consiglio di iniziare controllando i log degli eventi del tuo sistema operativo ed eseguendo un perfmon per tenere traccia della memoria, dell'uso della CPU ecc.

Quale computer si blocca, il server o il client? E quali sistemi operativi eseguono rispettivamente?

Come notato da Daniel L, i cicli di polling stretti possono davvero uccidere la CPU. Se puoi, modifica il codice per utilizzare i gestori di eventi, è una soluzione molto più solida.

Infine, sei sicuro che non ci sia un problema hardware sul computer che si blocca?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top