Warum wird der IIS-Arbeitsprozess alle 29 Stunden und nicht alle 24 Stunden wiederverwendet?

24

Wenn Sie eine Site in IIS einrichten, wird der Arbeitsprozess standardmäßig alle 1740 Minuten (29 Stunden) neu gestartet. Warum eine ungerade Zahl wie 29 Stunden und nicht zum Beispiel 24 oder 48 Stunden?

Kerl
quelle

Antworten:

27

Bei der Tech Ed 2003 wurde dem Moderator diese Frage gestellt und die Antwort lautete, dass ein unregelmäßiger Zyklus gewünscht wird, um zu verhindern, dass er an einer täglichen Grenze auftritt (z. B. um sich von anderen täglichen Aufgaben zu unterscheiden, die auf dem Server / der Domäne geplant sind).

Die Seite hier (Link tot) spekuliert:

... (29 ist die) erste Primzahl nach 24, wodurch die geringste Wahrscheinlichkeit besteht, dass sie in einem regulären Muster mit einem anderen Serverprozess auftritt. Erleichterung der Untersuchung von Problemen

Eine andere Site scheint dies zu bestätigen:

( Wade Hilmo ) schlug 29 Stunden vor, aus dem einfachen Grund, dass es die kleinste Primzahl über 24 ist. Er wollte ein gestaffeltes und sich nicht wiederholendes Muster, das nicht häufiger als einmal pro Tag auftritt

StuartLC
quelle
Interessant. Persönlich denke ich, dass es einfacher ist, zu verfolgen, ob das Recycling des Arbeitsprozesses andere Probleme verursacht hat, wenn sich jeden Tag etwas wiederholt. ZB ist es schwierig, ein Problem aufzuspüren, das ungefähr jeden Tag auftritt. Es ist jedoch einfacher, es jeden Tag um 19 Uhr aufzuspüren, da Sie das System nach Ereignissen durchsuchen können, die zu diesem Zeitpunkt auftreten. Ich weiß, dass Sie IIS so einstellen können, dass es wiederverwendet wird, wann immer Sie möchten oder nicht, aber die meisten lassen es auf der Standardeinstellung. Danke für die Antwort!
Guy
18

OK, das hat mich nervt, also habe ich mich umgesehen und endlich diesen Beitrag von einem Typen gefunden, der anscheinend im IIS-Team war:

Der Grund, warum IIS6 standardmäßig alle 29 Stunden wiederverwendet wird (und wir hatten einen Grund)

Der Grund, warum IIS6 standardmäßig alle 29 Stunden wiederverwendet wird (und wir hatten einen Grund, 29 Stunden als Standardwert zu wählen), ist, dass die darauf ausgeführte Webanwendung höchstwahrscheinlich unzuverlässig ist und buchstäblich häufig neu gestartet werden muss.

Daher basiert IIS6 auf der Voraussetzung (zugegebenermaßen zynisch), dass die Webanwendung des Benutzers nicht länger als 24 aufeinander folgende Stunden ausgeführt wird, die Funktionen entsprechend geplant und die Standardeinstellungen ausgewählt werden. Worker-Prozesse werden alle 29 Stunden wiederverwendet, der Start und das Herunterfahren von Prozessen werden überwacht, der Prozess wird ständig gepingt, um sicherzustellen, dass er ausgeführt wird, das Prozesshandle wird verfolgt und signalisiert, wenn er unerwartet beendet wird, usw. usw.

IIS6 erkennt, dass Recycling ein normaler Bestandteil des Betriebs ist und isoliert dieses Recycling auch vom Endbenutzer. Die TCP-Verbindung des Endbenutzers wird während eines Recyclings aufgrund von Kernelmodus-Magie niemals beendet. In Kombination mit einer Anwendung im Benutzermodus, in der der Sitzungsstatus außerhalb des Prozesses gespeichert wird (wie beim ASP.Net-Sitzungsstatusdienst), ist praktisch eine zuverlässige Betriebszeit ohne sichtbaren Datenverlust gewährleistet, selbst wenn die Webanwendung nach jeder einzelnen Verarbeitung abstürzt Benutzeranfrage.

Dies ist ungefähr so ​​gut, wie es mit IIS6 möglich ist - wenn eine unzuverlässige Webanwendung vorhanden ist, sie für den Endbenutzer als zuverlässig erscheint und keine Korrekturen für die unzuverlässige Webanwendung erforderlich sind.

Natürlich kann nicht jede unzuverlässige Bewerbung als zuverlässig eingestuft werden - wenn ja, dann sind wir alle arbeitslos! - aber IIS6 versucht sicher noch viel mehr, widerstandsfähig zu sein.

In Ihrem Fall hat die Ausfallsicherheit nur einen Nebeneffekt auf den nicht beständigen Benutzerstatus, kann jedoch leicht angepasst werden.

Angenommen, Ihre Webanwendung hat nie ein Problem und verbleibt im Sitzungsstatus "In Bearbeitung". Dann sollten Sie die folgenden Standardeinstellungen ändern: 1. Deaktivieren Sie das regelmäßige Recycling für 29 Stunden

Dadurch wird ein unerwarteter Verlust des Sitzungsstatus verhindert.

Wenn Sie eine Anwendung mit einem Sitzungsstatus außerhalb des Prozesses verwenden, können Sie natürlich alle Einstellungen als Standardeinstellungen beibehalten und keinen Unterschied in der Funktionalität oder Zuverlässigkeit feststellen.

DOK
quelle
1
Ich fühle mich dumm, wenn ich das frage, aber wenn IIS annimmt, dass die Web-App es nicht bis 24 Stunden schafft, warum war 29 eine gute Wahl? Sollten sie nicht eine Nummer unter 24 gewählt haben? Wo liege ich falsch, wenn ich diese Erklärung interpretiere?
Alpha
Vielleicht gibt es keine "beste" Antwort für den Standardwert, und die Person, die die Website verwaltet, sollte eine bewusste Entscheidung treffen, die auf der App und dem System basiert.
DOK
@Alpha - ich stimme zu - das macht keinen Sinn - es sollte standardmäßig 22 oder 23 Stunden oder mindestens etwas weniger als 24 sein.
Guy
[Zitieren benötigt]
Piers7
Ich bekomme jeden Morgen einen seltsamen Kompilierungsfehler auf Teilen der Website, der nur durch ein Recycling behoben werden kann. Ich vermute, das Idle Timeout wird über Nacht aufgrund geringer Last ausgelöst, und aus irgendeinem Grund ist der Kompilierungsfehler zurück, wenn es erneut gestartet wird. Vielen Dank für den
Hinweis