Frage

Ihr Wissen darüber, wie Prozesse durch den ASP.Net-Arbeitsprozess behandelt werden, ist völlig unzureichend. Ich bin einige Experten da draußen die Hoffnung füllen kann mich in.

Wenn ich den Arbeitsprozess mit einem System.OutOfMemoryException abstürzen, was würden die User Experience für andere Anwender, die nach dem gleichen Verfahren bedient wurden? Würden sie einen leeren Bildschirm bekommen? 503 Fehler entdeckt?

Ich werde versuchen, dieses Szenario zu testen, mit einigen anderen Leuten in unserem Labor, aber ich dachte, ich würde diese dort schweben heraus. Ich werde mit unseren Ergebnissen aktualisieren.

UPDATE : Unsere Ergebnisse variieren. Wenn wir künstlich eine OOM Ausnahme (zum Beispiel durch das Laden größer und größer PDFs in dem Speicher), andere Threads werden von diesem Arbeitsprozess induziert würde gedient „hängen“ vorübergehend und dann vollständig, während andere scheinbar nie wieder zurückkehren. Vielen Dank für Ihre Antworten.

War es hilfreich?

Lösung

W3WP.exe ist der Prozess

IIS führt alle Web-Anwendungen in einem allgemeinen Arbeitsprozess - w3wp.exe. Egal, ob Sie in ASP.NET schreiben oder ISAPI oder einem anderen Rahmen, der Prozess, der die Web-Anfrage dient, ist w3wp.exe. Im ASP.NET Fall w3wp.exe lädt die ASP.NET JIT-kompilierten DLLs und Dienstleistungen, um die Anforderungen, die durch sie. In anderen Fällen funktioniert es anders. Aber der entscheidende Punkt ist, w3wp.exe ist der Prozess. Dieses Modell begann in IIS6.0 und setzt sich in IIS7.0.

Unerwarteter Fehler

Wenn die W3WP.exe unerwartet ausfällt, aus irgendeinem Grund, alle Transaktionen wurde Handling erhalten wahrscheinlich 500 Fehler (Serverfehler). IIS wird einen neuen Arbeitsprozess an seiner Stelle ( MS nennt dies "Health Monitoring" ), was bedeutet, dass der Web-App wird auch weiterhin laufen. Benutzer, die nicht eine Anforderung, die gedient durch den fehlerhaften Prozess zum Zeitpunkt des Ausfalls werden haben, keine Kenntnis von irgendetwas davon.

  

Der HTTP-Fehler 500, dass ein Kunde in diesem Fall erhält, wird von einem 500-Fehler nicht zu unterscheiden sein, dass der Kunde erhält im Falle eines Anwendungsfehler, sagen wir eine abgefangene Ausnahme in Ihrem ASPNET Anwendungscode.

Für die Anforderungen, die in dem fehlerhaften Prozess waren, gibt es keine Möglichkeit, sie zu erholen. Sie werden an den Browser in 500 Fehlern führen. A 503 Server ausgelastet Ergebnisse von IIS weigert aktiv die Verbindung aufgrund einer Schwelle auf die Anzahl der Verbindungen. A 503 resultiert nicht aus einem Anwendungsfehler, so sollten Sie nicht im Fluge Transaktionen in dem Out-of-Memory-and-Crash-Szenario zu sehen 503 erwarten. Auf einem stark ausgelasteten System, können Sie 503 ist als der Prozess-Crash-und-Neustart geschieht, als Nebeneffekt sehen. Wenn das wirklich ist, was Sie sehen, benötigen Sie einen größeren Sicherheitsabstand um die Last in dem Einzelfehlerzustand zu behandeln.

Die Request Queue

IIS hat eine Hand-off-Ansatz für Anfragen . Da sie auf der Netzwerkschicht (Http.sys) ankommen, werden sie in eine Warteschlange gestellt werden, von einem Arbeitsprozess aufgenommen werden. Alle Anfragen in der IIS-Warteschlange von einer WP gehandhabt werden unbeeinflusst weiter, obwohl sie eine leichte vorübergehende Erhöhung der Latenzzeit (Servicezeit) aufgrund von Ressourcenkonflikten sehen könnten, da man weniger Prozess auf dem Server ausgeführt wird. Wartezeit in dieser Warteschlange im Allgemeinen sehr sehr kurz ist, auf einem System, das richtig konfiguriert ist.

Es ist, wenn diese Warteschlange voll ist, dass Sie 503 Fehler sehen.

Automatischer Neustart von W3WP.exe

IIS hat einen Auto-Neustart (oder "Kindermädchen") Einrichtung, durch die a href <= "http://technet.microsoft.com/en-us/library/cc737679(WS.10).aspx" rel = „nofollow noreferrer“> Neustart Arbeitsprozesse nach dem sie konfiguriert Schwellenwerte überschritten haben , wie die Speichergröße, die Anzahl der Anfragen oder Time-of-läuft. In allen diesen Fällen wird IIS Quiesce und Neustart Arbeitsprozesse bei der konfigurierten Schwellenwert erreicht ist. Diese proaktiven Neustarts normal nicht zu einer Störungen des Anfrage. Wenn II entscheidet, dass ein Neustart eines Arbeitsprozess notwendig ist, verhindert, dass es keine neuen Anforderungen von der Ankunft an diesem zu-Quiescemodus WP. Bestehende Anfragen sind Drained : alle in-flight-Transaktionen in diesem WP sind zu vervollständigen normalerweise erlaubt. Wenn alle Anforderungen in der WP abgeschlossen ist, dann wird der WP Gesenke und IIS startet einen neuen an seiner Stelle. Dieser neue Prozess beginnt dann sofort neue Anfragen aus der Absende-Warteschlange Abholung. Das ist alles für den Benutzer transparent oder Browser.

sage ich normal , weil es möglich ist, dass der Arbeitnehmer proCess hat zugleich wirklich krank geworden, da der Schwellenwert erreicht worden ist. In diesem Fall wird der w3wp.exe kann nicht reagieren auf IIS innerhalb von die konfigurierte „quiesce“ timeout und IIS so muss schließlich den Prozess töten, obwohl es nicht gemeldet hat, dass alle seine in-flight-Anforderungen abgeschlossen haben. Dies sollte sehr selten sein, weil es zwei verschiedene Ausnahmebedingungen, aber es passiert. In diesem Fall, wenn die in-flight-Anfragen wieder werden, erhalten 500 Fehler.

Webgärten

Auch - IIS ermöglicht mehrere Worker-Prozesse auf einem einzigen Server. MS Anrufe dies ein „Web-Garten“ , ein Wortspiel aus „Web-Farm“. Wenn Sie einen Web-Garten eingerichtet haben, dann durch w3wp.exe Instanzen anders als die andernfalls ein bedient Transaktionen wird, wird nicht beeinflusst fortsetzen. „Unabhängig“ vermutet aber, dass der Out-of-Speicherfehler lokalisiert ist, und nicht um ein systemweite Problem.

Bottom Line

Das Endergebnis ist, dass es keinen Ersatz für Ihre eigenen Tests ist. Die Konfigurationsoptionen sind ziemlich breit - von restart Schwellen auf dem Web-Gärten und so weiter. Auch die Ausfallarten sind in der Regel sehr komplex und vielfältig sein, ob es sich um Speicher, Timeout, zu viel zu tun, und so weiter. Sie wollen verstehen, was zu erwarten ist.

ps: die Q & A gehört wirklich auf serverfault.com !!


Referenzen:
http: // blogs. iis.net/thomad/archive/2008/05/07/the-iis-process-model-features.aspx

Andere Tipps

Ein neuer Arbeitsthread wird gestartet und der Benutzer würde nicht wissen, nichts passiert ist. Es sei denn, es schaltet sich vollständig über schnelle fail ( http: // technet.microsoft.com/en-us/library/cc779127(WS.10).aspx )

Wenn es sich um eine aus der Erinnerung Situation ist, in der Regel iis rezykliert nur die App-Pool.

Wie die anderen Antworten sagen, in den meisten Fällen alles nur neu gestartet wird, und die meisten Nutzer, die keine ausstehende Anforderung zum Zeitpunkt feststellen, werden nicht viel mehr hatten als eine Verzögerung.

Allerdings, wenn Ihre Anwendung Session-Variablen mit In-Proc Sitzungsstatus verwendet, sind alle Session-Variablen für alle Benutzer, wenn die App-Pool neu gestartet werden, verloren. Dies kann oder kann nicht eine negative Wirkung auf die Nutzer haben, je nachdem, was Sie mit den Session-Variablen tun. Sie können dies vermeiden, indem Sie auf State oder SQL Server-Sitzungsspeicher umgeschaltet wird.

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