Wie kann der von einer Anwendung in IIS verwendete Speicher begrenzt werden?

15

Die IIS-Arbeitsprozesse beanspruchen viel Speicher auf unseren Servern. Ich möchte den Speicherplatz begrenzen, den jede Anwendung verwenden kann. Ich bin verwirrt, ob ich ein Limit für den virtuellen oder den privaten Speicher festlegen soll. Jede Anwendung in unserem IIS befindet sich in einem eigenen Anwendungspool.

Wenn ich das private Speicherlimit auf 500 MB und das virtuelle Speicherlimit auf 3 GB einstelle. Wann wird der Anwendungspool wiederverwendet? Wird nach Erreichen von 500 MB oder nach Erreichen von 3 GB recycelt.

Kishore
quelle
Wo sind diese Optionen für 'Virtual Memory Limit' und 'Private Memory Limit', von denen Sie sprechen?
Colonel Panic
1
@ColonelPanic Unter IIS 7.5 befinden sie sich im Bereich eines App-Pools Advanced Settings -> Recycling.
ngm

Antworten:

15

IIS wird diese beiden Grenzen einhalten.

Wenn Sie ein privates Byte-Limit von 500 MB festlegen, startet IIS einen neuen Arbeitsprozess und beendet den alten, sobald ein Arbeitsprozess versucht, 501 MB festzuschreiben.

Wenn Sie ein virtuelles Speicherlimit von 3 GB festlegen, startet IIS einen neuen Arbeitsprozess und beendet den alten, sobald ein Arbeitsprozess versucht, 3.001 GB zu reservieren.

Wenn Sie auf einer 64-Bit-Plattform arbeiten, sollten Sie wissen, dass die ASP.NET-App aggressiv virtuellen Speicher reserviert. Als Beispiel habe ich eine App in einer Farm, die nur 88 MB privater Bytes verwendet, aber derzeit eine virtuelle Größe von 5,4 GB hat. Ich glaube, die virtuelle Speicherreservierung ist eine Funktion des physischen RAM auf dem Server. Es ist auch wichtig zu verstehen, dass das Reservieren großer Teile des virtuellen Speichers auf einer 64-Bit-Plattform keine Auswirkungen auf die Leistung hat.

Grundsätzlich gilt: Wenn Sie Probleme mit dem Speicherverbrauch auf einem IIS-Server haben, sollten Sie die Einstellung Privater Speicher / Bytes einschränken. Dies entspricht der tatsächlichen Speichernutzung.

Dominic D
quelle
Vielen Dank, Dominic. Gibt es eine Möglichkeit, einen Prozess für die Verwendung von 500 MB privatem Speicher festzulegen, und sobald diese Grenze überschritten ist, können Sie den virtuellen Speicher auf der Festplatte ohne Wiederverwendung verwenden?
Kishore
1
Nicht dass ich wüsste. Wenn Sie in einer ASP.NET-Anwendung anfangen, Probleme mit dem Festschreiben von Bytes zu haben, haben Sie grundsätzlich drei Optionen. 1. Recyceln Sie den Prozess, wenn Sie das Limit erreichen oder nachts außerhalb der Geschäftszeiten (offensichtlich nicht bevorzugt, und vergessen Sie nicht, die Sitzungsdaten korrekt zu verwalten, wenn Sie während eines Nutzungsfensters recyceln). 2. Holen Sie sich zusätzlichen physischen Speicher für die Anwendung (fügen Sie RAM hinzu Je nach Situation kann dies die einfachste Lösung sein, um eine Serverfarm einzurichten oder in eine andere Farm zu wechseln. 3. Ändern Sie die Anwendung so, dass sie den Speicher effizienter nutzt. (Beste Option, aber möglicherweise schwierig zu implementieren)
Dominic D
Ich bemerkte auch die aggressive Reservierung von Speicher in mehreren ASP.NET-Apps. Kann jemand einige gute Ressourcen zu diesem Thema empfehlen, um zu studieren? Ich würde gerne mehr darüber verstehen, wie und warum es passiert ... Ich beobachte, dass je mehr Speicher verfügbar ist, desto mehr Speicher die Apps zuweisen.
Tom Pažourek