Après quel type d'exceptions / Crashes une instance ne Azure cloud effectuer redémarre?

StackOverflow https://stackoverflow.com/questions/8800571

  •  25-10-2019
  •  | 
  •  

Question

Pour autant que je me rappelle, une instance de rôle doit effectuer automatiquement un redémarrage après un accident / panne. Afin de tester ce comportement, je l'ai écrit une application qui applique un hors-mémoire exception et ma demande écrasements. L'instance de rôle n'a pas effectué un redémarrage, car il était encore en cours d'exécution et ok -. L'instance juste restartet le moteur d'exécution .NET

Je suis en train de savoir comment une instance réagit sur les erreurs différentes. Dans mon cas, un redémarrage n'a pas été nécessaire. Quel type d'erreurs / exceptions (que je peux appliquer) entraînerait un redémarrage complet d'une instance? Quel type d'erreurs / exceptions tueraient une instance pour toujours?

Était-ce utile?

La solution

La seule raison qui provoque une instance de rôle à recycler (redémarré) est lorsque le méthode Run de RoleEntryPoint sorties. Cela se produit généralement lorsque vous:

  1. Run ( ) méthode et
  2. Avoir une exception non gérée dans votre code de programme, qui causerait la Run () méthode de sortie

Votre rôle serait toutefois recycler, mais plutôt se bloquer, lorsque vous avez activé la collection IntelliTrace.

Le modèle par défaut pour un WebRole ne remplace pas

UPDATE 1 (acording commenter 1)

run-Methoded of a RoleEntryPoint faces an error

Non seulement une erreur, mais ce genre d'erreur (à savoir une exception non gérée), ce qui provoque la méthode Run () pour quitter.

De plus, vous ne pouvez pas passer outre la course () dans votre WebRole, becasue votre RoleEntryPoint descendat vie dans les différents domaines d'application (même processus différent), votre application web (il aura aucune idée sur les exceptions de votre application). En savoir plus sur IIS complète d'hébergement et de processus ici .

Ainsi, pour un rôle Web que vous avez juste une application Web dans IIS 7.0 fonctionnalités entièrement / 7.5, qui n'a aucune idée que cette IIS fait partie d'un déploiement Azure. Global.asax est votre place pour gérer les erreurs d'application Web dans ASP.NET non gérées. Consultez cette question, la réponse qui fournit un bon exemple pour gestionnaire Application_Error () .

Vous pouvez utiliser le RequestRecycle méthode statique de type RoleEnvironment d'exiger manuellement le recyclage de rôle dans la méthode Application_Error (). Cependant, ne vous recommande pas de le faire. Je ne vois pas une bonne pratique dans le redémarrage du serveur Web en raison d'une erreur d'application. Vous devez mettre en œuvre une bonne gestion des exceptions et de la stratégie de journalisation des erreurs, examinez vos journaux regulary d'erreur et prendre des mesures pour éviter les erreurs Crytical qui nécessiteraient un redémarrage du serveur.

Quelle est votre intention initiale? Pour comprendre quand un rôle sera recyclé automacitally, ou de modéliser votre application telle que de recycler automatiquement votre rôle en cas d'erreur? Si c'est ce dernier, je suggère que vous révisez vos besoins d'affaires / logique.

MISE À JOUR 2

Je ne peux pas parler de la bouche de Neil, mais « l'échec de l'instance » est tout ce qui peut causer une machine virtuelle en cours d'exécution pour accrocher. Instance dans Windows Azure est une machine virtuelle signle que le code d'hôtes votre application (lire ce billet de blog explanaition détaillé sur service hébergé, Rôle, Instance). Votre application fonctionne dans un système d'exploitation basé sur Windows Server. Il est une machine virtuelle. Tout peut arriver - de défaillance matérielle sur l'hôte, à un logiciel générique / défaillance du conducteur du système d'exploitation invité. Il est non nécessaire d'être votre code. Donc, dans le cas où il arrive quelque chose qui provoquerait une seule machine virtuelle à l'échec - ce problème est géré automatiquement par Windows Azure Fabric. Si ce neccessary - votre code est automatiquement déployé sur une autre machine virtuelle. Et cela se produit automagiquement. Vous ne nohting. Imaginez un disque dur pauses, ou un module de mémoire brûle, ou cesse de répondre interface réseau - ce ne sont que quelques questions simples qui pourraient causer une machine virtuelle en cours d'exécution à l'échec. Ceci est un échec d'instance.

Un échec dans votre code est quelque chose que vous devez prendre en charge. Tout le reste -. Contrôleur Windows Azure Fabric prend en charge

Mettre à Jour 3

  1. Qu'est-ce qui se passe à une application asp.net dans un WebRole si une exception se produit et il n'est pas traitée? l'application juste accrocher dans un état non défini ( « cassé ») jusqu'à ce que je cherche ou sera-ce terminé par le vm?

Cette question est tout à fait hors de portée! Qu'est-ce qui arrive à une application asp.net dans un compte d'hébergement mutualisé? Ou sur site dans IIS installation? plantage de l'application pour l'utilisateur dont les actions a causé l'accident. Le pire application de cas recyclage de la piscine. Je ne l'ai jamais vu une application asp.net « accroché ». Il n'y a pas une telle chose comme « application asp.net terminée » ou « cassé ». S'il est une erreur générique qui est provoquée lors du démarrage de l'application ou la première demande - la demande ne sera jamais en ligne. Si elle est l'erreur causée par une séquence d'actions de l'utilisateur - utilisateur un message d'erreur laid et rien de plus (sauf si vous avez gestionnaire Application_Error () approprié dans votre Global.asax je pense qu'il est assez d'explications pour une question ayant rien à voir. avec Azure.

  1. Pouvez-vous penser à un morceau de code .NET dans mon application qui pourrait provoquer l'écrasement d'un rôle Web tout ou il est impossible avec code managé (à l'exception d'un bogue inconnu dans .NET)?

Vous plaisantez? Ce code va planter votre rôle Web et forcera un recyclage:

RoleEnvironment.RequestRecycle()

S'il vous plaît accepter cette question, car je ne pense pas qu'il y ait quelque chose qui manque. De plus, il a des réponses à au moins 4 autres questions, ajoutées à l'original.

FINAL

Il n'y a pas une telle chose comme « tuer l'instance pour toujours ».

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