Question

Je sais que c’est probablement le canonique "Cela dépend ..." question, mais j'apprécierais toutes les indications quant à l'endroit où commencer à chercher.

J'ai une application client / serveur qui parle via Ethernet. Sur un ordinateur, j'exécute le serveur et un client et sur un autre, uniquement le client. L'un tourne sous Vista et l'autre sous XP. Après un temps de disponibilité d'environ 3 semaines, tout l'ordinateur se bloque et rien ne fonctionne, pas la souris, pas le clavier, rien - éteignez-le. Toutes les dix secondes, le serveur envoie un message ping pour voir si les clients sont en vie. En dehors de cela, seuls quelques petits messages sont échangés tous les jours.

J'essaie de savoir si c'est moi qui le cause ou quelque chose d'autre. J'ai commencé une session et au bout de quelques jours, je pensais vérifier l'étendue de l'utilisation de la mémoire, mais au-delà, j'ai très peu d'idées.

Était-ce utile?

La solution

Quelques réflexions à prendre en compte:

  1. Vous savez que l'ordinateur ne répond pas, mais cela ne signifie pas qu'il est bloqué. Répond-il à un ping?
  2. Peut-être que le voyant d'activité du disque est allumé en permanence?
  3. Vous dites "pas de clavier". - voulez-vous dire pas de majuscule ni de serrure numérique?
  4. Bien que l'application .NET soit peut-être la seule que vous exécutiez à ce moment-là, cela ne veut pas dire que c'est la cause du problème. Certains travaux en arrière-plan pourraient le faire.

Par exemple, je remarque que la sauvegarde Retrospect, lorsqu’elle crée un instantané, bloque l’ensemble du système pendant 10 à 15 minutes. Je veux dire, pas de majuscule, l'horloge dans la barre des tâches ne se met pas à jour, pas de CTRL-ALT-DEL, ne peut pas taper de "Réponse". zone de texte dans SO, rien. Cela n'avait rien à voir avec ce que je faisais à l'époque, qui répondait à une question sur SO.

Après son retour, SO a alors demandé si j'étais un humain. Mes sentiments ont été blessés. ; -)

Autres conseils

Vous pouvez attacher un débogueur de noyau au système d'exploitation. De cette façon, vous devriez pouvoir inspecter l’état du système d’exploitation et votre processus, même si celui-ci ne répond plus du tout. (Malheureusement, c’est beaucoup plus difficile que de simplement "casser" dans VS. Je suggère de lire "Débogage d’applications pour .NET et Windows" de John Robbin avant de l’essayer.)

Vous pouvez également essayer de créer des images mémoire de votre application à intervalles réguliers. Vous devrez peut-être faire un peu de script pour cela, cependant. (en général, vous créez une sauvegarde avec une frappe, en utilisant un outil tel que userdump ou adplus, mais si le système d'exploitation ne répond pas aux frappes au clavier, cela ne fonctionnera pas.) Ainsi, vous saurez dans quel état se trouve votre processus pendant le traitement. ou peu de temps avant un coup. Cette page: http://blogs.msdn.com/debuggingtoolbox/default.aspx . est un bon point de départ pour la programmation de WinDbg. (Si vous ne savez pas quoi faire avec un vidage de mémoire, je suggérerais à nouveau l'excellent livre de John Robbin sur le débogage!)

En dehors de cela, je ne peux que penser à des astuces de débogage standard: le problème se produit-il sur tous les ordinateurs? Cela se produit-il s'il n'y a pas de demande de client? Cela se produit-il plus tôt s'il y a plus de demandes de clients? Cela se produit-il plus tôt s'il y a moins de mémoire physique disponible? Essayez de supprimer des parties de votre application (peut-être sur un serveur séparé pour les tester) et voyez si le problème persiste, etc. Essayez de l’exécuter sur une machine virtuelle afin de voir si elle utilise le processeur, le disque dur ou le réseau pendant ces "blocages".

Cela ne sera pas la réponse, mais je vous conseillerais de commencer par consulter les journaux des événements de votre système d'exploitation et d'exécuter un perfmon pour garder une trace de la mémoire, de l'utilisation du processeur, etc.

Quel ordinateur bloque, le serveur ou le client? Et quels systèmes d’exploitation utilisent-ils respectivement?

Comme l'a noté Daniel L, des boucles d'interrogation serrées peuvent réellement tuer le processeur. Si vous le pouvez, changez votre code pour utiliser des gestionnaires d’événements, c’est une solution beaucoup plus robuste.

Enfin, êtes-vous certain qu'il n'y a pas de problème matériel sur l'ordinateur qui gèle?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top