Nach welcher Art von Ausnahmen/Abstürzen führt eine Azure -Cloud -Instanz Neustarts durch?

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

  •  25-10-2019
  •  | 
  •  

Frage

Soweit ich mich erinnere, sollte eine Rolleninstanz nach einem Absturz/Fehler automatisch einen Neustart durchführen. Um dieses Verhalten zu testen, habe ich eine Anwendung geschrieben, die eine außeremmory-Exception erzwingt, und meine Anwendung stürzte ab. Die Rolleninstanz hat keinen Neustart durchgeführt, da sie noch ausgeführt und in Ordnung war - die Instanz startete einfach die .NET -Laufzeit neu.

Ich versuche herauszufinden, wie eine Instanz auf unterschiedliche Fehler reagiert. In meinem Fall war ein Neustart nicht notwendig. Welche Art von Fehlern/Ausnahmen (die ich durchsetzen kann) würde einen vollständigen Neustart einer Instanz verursachen? Welche Art von Fehlern/Ausnahmen würde eine Instanz für immer töten?

War es hilfreich?

Lösung

Der einzige Grund, warum eine Rolleninstanz recycelt (neu gestartet) wird, ist, wenn die Laufen Methode von RollenEntrypoint Ausgänge. Dies geschieht normalerweise, wenn Sie:

  1. Überschrieben Laufen() Methode und
  2. Haben Sie eine unberechtigte Ausnahme in Ihrem Programmcode, das das verursachen würde Laufen() Methode zum Beenden

Ihre Rolle würde jedoch recyceln, sondern hängen, wenn Sie die Intellitrace -Protokolle ermöglicht haben.

Die Standardvorlage für ein Webrol überschreibt nicht Laufen() Methode, so die Standardimplementierung, die "Thread.Sleep (-1) ist;". Es gibt kein (automatisches) Ereignis, das automatische Rolle eines Webroles verursachen würde. Wenn Sie nicht in Ihrem Rolleneintritt etwas tun, würde dies dazu führen, dass die Laufmethode zum Beenden ist. Dieses automatische Recycling erfolgt nur mit Workerrole, die die Run () -Methode implementieren.

Update 1 (acording zu kommentieren 1)

run-Methoded of a RoleEntryPoint faces an error

Nicht nur ein Fehler, sondern eine solche Art von Fehler (dh eine unberechtigte Ausnahme), die dazu führt, dass die Run () -Methode beendet.

Darüber hinaus können Sie den Run () in Ihrem Webrol nicht einfach außer Kraft setzen, sondern auch Ihre Rolle, die Descendat in verschiedenen App -Domäne (sogar unterschiedliche Prozesse) als Ihre Webanwendung lebt (daher wird es keine Ahnung von Ausnahmen Ihrer Anwendung haben). Lesen Sie mehr über das Full IIS -Hosting und -prozess hier.

Für eine Webrolle haben Sie nur eine Webanwendung in vollständigem Features IIS 7.0 / 7.5, was keine Ahnung hat, dass dieser IIS Teil einer Azure -Bereitstellung ist. Global.asax ist Ihr Ort, um unberührte Webanwendungsfehler in ASP.NET zu verwalten. Kasse diese Frage, Die Antwort, deren Antwort ein gutes Beispiel für application_error () Handler liefert.

Sie könnten die verwenden Requestrecycle Statische Methode des Umwelttyps, um manuelles Rollenrecycling in Ihrer Methode für application_error () zu erfordern. Empfehlen Sie dies jedoch nicht, dies zu tun. Ich sehe keine gute Praxis beim Neustart des Webservers aufgrund eines Anwendungsfehlers. Sie sollten eine gute Ausnahmeregelung und Fehlerprotokollierungsstrategie implementieren, Regulary untersuchen Ihre Fehlerprotokolle und Maßnahmen, um krytische Fehler zu vermeiden, für die der Server neu gestartet werden müsste.

Was ist Ihre ursprüngliche Absicht? Um zu verstehen, wann eine Rolle automatisch recycelt wird, oder um Ihre Anwendung zu modellieren, um Ihre Rolle beim Fehler automatisch zu recyceln? Wenn es das letztere ist, schlage ich vor, dass Sie Ihre Geschäftsanforderungen/Ihre Logik überarbeiten.

Update 2

Ich kann nicht aus Neils Mund sprechen, aber "Instanzversagen" ist alles, was dazu führen kann, dass ein laufender VM hängt. Instanz in Windows Azure ist ein virtueller Signle -Computer, der den Code Ihrer Anwendung hostet (lesen Sie Dieser Blog -Beitrag für eine detaillierte Erläuterung des gehosteten Service, der Rolle, des Beispiels). Ihre Anwendung wird in einem Windows Server -basierten Betriebssystem ausgeführt. Es ist eine virtuelle Maschine. Alles könnte passieren - vom Hardwarefehler auf dem Host über einen generischen Software-/Treiberausfall des Gastbetriebs. Es ist nicht erforderlich, Ihr Code zu sein. Für den Fall, dass etwas geschieht, was dazu führen würde, dass ein einzelner VM fehlschlägt - wird dieses Problem automatisch vom Windows Azure -Stoff behandelt. Wenn es sich um einen unmittelbaren Code handelt, wird Ihr Code automatisch für eine andere virtuelle Maschine bereitgestellt. Und das passiert automatisch. Du machst nein. Stellen Sie sich vor, eine HDD bricht, oder ein Speichermodul brennt aus, oder eine Netzwerkschnittstelle reagiert nicht mehr - dies sind nur einige einfache Probleme, die dazu führen können, dass ein laufender VM fehlschlägt. Dies ist ein Instanzversagen.

Ein Fehler in Ihrem Code ist etwas, auf das Sie sich kümmern sollten. Alles andere - Windows Azure Fabric Controller kümmert sich um.

Update 3

  1. Was passiert mit einer ASP.NET -Anwendung in einem Webrol, wenn eine Ausnahme auftritt und nicht behandelt wird? Wird die Anwendung nur in einem undefinierten Zustand ("kaputt") hängen, bis ich danach suche oder von der VM beendet wird?

Diese Frage ist völlig aus dem Spielraum! Was passiert mit einer ASP.NET -Anwendung in einem freigegebenen Hosting -Konto? Oder in der IIS-Installation vor Ort? Anwendungsabsturz für den Benutzer, dessen Aktionen den Absturz verursachten. Der schlimmste Fall -App -Pool recyceln. Ich habe noch nie eine "Hung" ASP.NET -Anwendung gesehen. Es gibt keine "beendete ASP.NET -Anwendung" oder "kaputt". Wenn es sich um einen generischen Fehler handelt, der während des Starts oder der ersten Anforderung an Anwendungsanforderungen verursacht wird, wird die Anwendung niemals online sein. Wenn es ein Fehler ist, der durch eine Abfolge von Benutzeraktionen verursacht wird - wird der Benutzer eine hässliche Fehlermeldung und nichts weiter angezeigt (es sei denn, Sie haben entsprechende application_error () Handler in Ihrem globalen mit Azure.

  1. Können Sie sich ein Stück .NET -Code in meiner Anwendung vorstellen, das den Absturz einer gesamten Webrolle verursachen kann, oder es ist mit verwalteten Code nicht möglich (abgesehen von einem unbekannten Fehler in .NET)?

Machst du Witze? Dieser Code stürzt Ihre Webrolle ab und erzwingt ein Recycling:

RoleEnvironment.RequestRecycle()

Bitte akzeptieren Sie diese Frage, da ich nicht glaube, dass etwas fehlt. Außerdem gibt es Antworten auf mindestens 4 weitere Fragen, die zum ursprünglichen hinzugefügt wurden.

FINALE

Es gibt keine "töten Sie die Instanz für immer".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top