Question

Cet article donne une bonne vue d'ensemble sur pourquoi la gestion structurée des exceptions est mauvaise. Existe-t-il un moyen d’obtenir la robustesse d’empêcher votre serveur de se bloquer, tout en surmontant les problèmes mentionnés dans l’article?

J'ai un logiciel de serveur qui exécute environ 400 utilisateurs connectés simultanément. Mais s'il y a un crash tous les 400 utilisateurs sont affectés. Nous avons ajouté une gestion structurée des exceptions et apprécié les résultats pendant un certain temps, mais nous avons finalement dû les supprimer en raison de certaines pannes entraînant le blocage de l'ensemble du serveur (ce qui est pire qu'une simple panne et un redémarrage du serveur).

Nous avons donc ceci:

  • Avec SEH: un seul utilisateur du 400 rencontre un problème pour la plupart des accidents
  • Sans SEH: si un utilisateur tombe en panne, tous les 400 sont affectés.
  • Mais parfois, avec SEH: le serveur se bloque, les 400 utilisateurs concernés et les futurs utilisateurs essayant de se connecter sont concernés.
Était-ce utile?

La solution

Découpez votre programme en processus de travail et en processus serveur unique. Le processus serveur traitera les demandes initiales, puis les transmettra aux processus de travail. Si un processus de travail se bloque, seuls les utilisateurs de ce travailleur sont affectés. N'utilisez pas SEH pour la gestion des exceptions en général - comme vous l'avez découvert, il peut vous laisser ouvert la porte aux blocages, et vous pouvez quand même vous bloquer.

Autres conseils

Utiliser SEH parce que votre programme se bloque de manière aléatoire est une mauvaise idée. Ce n'est pas de la poussière magique de lutin que vous pouvez saupoudrer sur votre programme pour qu'il cesse de s'écraser. Repérer et corriger les bugs qui causent les crashs est la bonne solution.

Utiliser SEH lorsque vous avez vraiment besoin de gérer une exception structurée est acceptable. Larry Osterman a publié un article de suivi expliquant quelles situations nécessitent SEH: fichiers mappés en mémoire, RPC et transitions des limites de sécurité .

Corrigez les bugs dans votre programme? ;)

Personnellement, je garderais les gestionnaires SEH à l'intérieur, leur demanderais de vider la pile d'appels de la violation d'accès ou quoi que ce soit qui se passe et de résoudre les problèmes. Le problème "parfois, le serveur se bloque" est probablement dû à des blocages causés par le thread dont l'exception SEH gardait quelque chose de verrouillé. Il est donc peu probable que cela soit lié au fait que vous utilisez SEH lui-même.

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