Warum verwendet Windows 2008 Swap, bevor der Speicher voll ist?

9

Ich verwalte einen Windows 2008-Server (also unter Amazon EC2), auf dem IIS und eine .NET4-Webanwendung ausgeführt werden. Ich bekam neulich einen Speicheralarm und ging und schaute, und sicher war der Prozessspeicher im Laufe der Zeit durch eine Art langsames Leck gewachsen. Es wuchs nicht viel, genau wie 60 bis 200 Millionen, aber es war genug anderes mit der Box los, dass es unsere ziemlich niedrige Schwelle (75%) überschritt, um den Monitor auszuschalten.

Ich habe den Pool der App recycelt und den Speicher freigegeben. Bei der Überprüfung der Statistiken habe ich festgestellt, dass der Swap-Speicherplatz erheblich genutzt wurde und mehr als 1 GB davon mit diesem Recycling freigegeben wurden.

Vielleicht ist dies eine grundlegende Frage, aber ich bin ein UNIX-Typ und ich bin es gewohnt, mich nicht daran zu gewöhnen, bis Sie nicht mehr genügend Speicher haben. Diese Box hat 75% des Speicherbedarfs nie überschritten. Ist das eine Windows-Sache oder eine .NET-Sache oder eine Amazon-Sache? Ich vermute, dass diese App einen viel größeren Speicherverlust aufweist als vermutet - sie tritt nicht von 60 Millionen auf 200 Millionen aus, sondern von 60 Millionen auf 1,2 GB, aber vieles davon wird irgendwie "kalt" und zum Austauschen herausgeschoben?

Ich habe das Speicherrecycling im Anwendungspool eingestellt, aber es löst den vollen Speicher aus der Box aus, sodass diese App sehr, sehr groß werden kann, bevor sie automatisch recycelt wird.

Ich könnte ein regelmäßiges "zeitgesteuertes" Recycling einrichten, aber das ist eine Problemumgehung. Ich werde den Entwickler dazu bringen, die App zu reparieren, muss aber verstehen, was hier mit der Swap-Nutzung vor sich geht, um sicherzustellen, dass ich dieses Recht verstehe.

Bearbeiten mit mehr Infos: Instanzspeicher: 1,7 GB Swap: 4,5 GB

Ich sehe den Prozess w3wp.exe in taskmgr, der diesen Speicher zeigt: 211.000k. Aber als ich es neu startete (es befindet sich in einem eigenen App-Pool und es ist die einzige App auf der Box), ging die Speichernutzung auf den normalen Startpunkt von 60 Millionen zurück und wie 1 GB + Swap wurde auch freigegeben. In taskmgr hatte ich gerade den üblichen Speicherstatus (Private Working Set), sah aber, dass sich der Austausch über meine andere Überwachung (Cloudkick) änderte. Wenn man sich das heute noch einmal ansieht, ist der Arbeitsspeicher wieder auf 195 MB angewachsen (insgesamt 1,2 GB), und der Swap hat sich von 1,0 GB auf 1,1 GB erhöht langsames Kriechen).

Ich bin weniger besorgt über diese spezielle App als vielmehr darüber, wann Windows-Swaps und deren Verwendung verwendet werden und was ich angesichts des Windows-Speichers und der Swap-Nutzung im Allgemeinen zu beachten habe.

Ernest Mueller
quelle
4
Übrigens, zumindest Linux wird Seiten opportunistisch austauschen, wenn lange nicht mehr auf sie zugegriffen wurde, auch wenn das System nicht annähernd den gesamten verfügbaren RAM nutzt. Dies geschieht, um Speicher für Festplatten-Cache, Puffer usw.
freizugeben
Wie viel Speicher hat diese Instanz? Wollen Sie damit sagen, dass der Prozess w3wp.exe 1 GB erreicht? Ist dies die einzige Site, die in diesem Anwendungspool ausgeführt wird?
Kev
@ KevΩ Auf Anfrage wurden weitere Informationen im Q hinzugefügt.
Ernest Mueller
@ErikA, gut zu wissen, ich glaube, ich habe den Leuten zugehört, die sagen: "Wenn Sie tauschen, haben Sie bereits Mistleistung, schalten Sie einfach den Tausch ganz aus und es geht Ihnen nicht der RAM aus." Ich sehe nicht so viel tauschen.
Ernest Mueller
Wenn Ihre Festplatte auf Festplatte übertragen wird, stimmt das. Wenn es tauscht, schafft es Platz für Puffer und dergleichen.
Bart Silverstrim

Antworten:

17

Windows und Linux haben zwei verschiedene Seiten- / Austauschstrategien.

Linux

Linux möchte die Verwendung von Swap Space überhaupt vermeiden und wartet bis zum letzten möglichen Moment. Wenn Sie unter Linux eine große Menge an Swap sehen, ist oder war Ihr System wahrscheinlich in Schwierigkeiten. Diese Strategie eignet sich gut zur Minimierung der gesamten Festplatten-E / A, die der langsamste Teil Ihres Systems ist, aber schwächer für Systeme mit abwechselnden Perioden leichter und schwerer Last (und ehrlich gesagt, das sind die meisten von uns). Die Zeiten, in denen Ihre Last bereits sehr hoch ist, werden jetzt durch die "zusätzliche" Festplatten-E / A belastet. Oder anders ausgedrückt: Sie müssen Ihre Server-Builds so gestalten, dass genügend RAM vorhanden ist, das Sie auch während des Ladevorgangs nicht austauschen können höchste erwartete Ladezeiten.

Windows

Windows möchte den Speicher als bloßen Cache der Auslagerungsdatei behandeln. Ihr realer Speicher befindet sich immer auf der Festplatte, wird jedoch zuerst aus dem "Cache" gelesen / geschrieben, wenn dies möglich ist. Diese Strategie ist gut geeignet, um Ihre Last im Laufe der Zeit auszugleichen. Wenn das System ausgelastet ist und Seiten austauschen muss, befindet sich die aktuelle Seite bereits auf der Festplatte und die Hälfte der Arbeit ist bereits erledigt. Dieser Ansatz war schon in jungen Jahren sehr sinnvoll, 32 MB (GB vergessen) verfügten noch über viel RAM, und die häufige Verwendung von Swap-Speicherplatz war selbstverständlich. Dies ist auch heute noch gut für Arbeitslasten geeignet, die zwischen leichten und ausgelasteten Lasten wechseln, da dies dazu beiträgt, die Festplatten-E / A im Laufe der Zeit gleichmäßiger zu verteilen.

Moderne Windows-Versionen verfügen über zusätzliche Optimierungen - wie z. B. SuperFetch - zum Vorladen und Vorbereiten von Speicherseiten auf der Festplatte und im RAM, wenn die Last ansonsten gering ist, um zu vermeiden, dass beim ersten Laden eines Programms zusätzliche Schreibvorgänge auf der Festplatte erforderlich sind. All dies bedeutet, dass Sie Ihr System so gestalten können, dass nur genügend RAM für etwas weniger als die höchste erwartete Last benötigt wird, sodass Sie jederzeit eine mindestens akzeptable Leistung bei reduzierten Kosten erzielen können.

Konvergenz

Dieses Konzept, die Last zuerst in einer Testumgebung zu messen oder vorherzusagen und dann Produktionsressourcen zuzuweisen, wenn die Last bekannt ist, ist eine relativ junge Entwicklung im Systemaufbau, die teilweise mit dem Aufkommen von virtuellen und dann Cloud-Servern möglich oder zumindest praktisch wurde . Abhängig von Ihrer Last können Sie das System sogar so gestalten, dass es überhaupt nicht ausgetauscht werden muss. In diesen Fällen können Sie unter Windows das Paging deaktivieren und sich eher wie ein Linux-System verhalten. Sie müssen jedoch vorsichtig sein; Wenn Ihr Systemdesign mehr Speicher als erwartet benötigt, können Sie auf diese Weise in Schwierigkeiten geraten.

Auf der anderen Seite sind moderne Linux-Kernel eher bereit, opportunistisch auf die Festplatte zu wechseln als früher. Der Unterschied in den Speicherverwaltungsstrategien zwischen den beiden Systemen ist also immer noch vorhanden, aber jetzt weniger ausgeprägt als früher. Beide Systeme haben ihre Vorzüge, und jedes beobachtet das andere, um zu sehen, welche Fortschritte sie kopieren können.

Joel Coel
quelle
Sehr spezifisch für die Windows-Endstrategie, danke! Auch von dieser Microsoft KB validiert fand ich ... support.microsoft.com/kb/2267427
Ernest Mueller
1
Linux wartet nicht unbedingt auf den letztmöglichen Moment, es sei denn, Sie setzen explizit vm.swappiness = 0. Beim Standardwert 60 werden Seiten ausgetauscht, die seit einiger Zeit nicht mehr berührt wurden.
Kjetil Joergensen
@KjetilJoergensen Lesen Sie unbedingt den letzten Abschnitt zur Konvergenz.
Joel Coel
1
@ JoelCoel Ich ziehe meine Kritik bedingungslos zurück :)
Kjetil Joergensen
7

Windows (und Linux und andere Unix-ähnliche Betriebssysteme) verschieben Seiten, die seit einiger Zeit nicht mehr verwendet wurden, auf die Festplatte, um Platz für Puffer und Cache zu schaffen und die aktive E / A-Aktivität zu beschleunigen. Außerdem weisen Anwendungen häufig mehr Speicher zu, als sie sofort verwenden werden. Dies kann den Kernel dazu ermutigen, einige Dinge zu paginieren, die kürzlich nicht im Hintergrund berührt wurden, sodass diese Anwendungen die Paging-Verzögerung nicht sehen, wenn sie plötzlich gestartet werden mit dieser Zuordnung.

Unter Linux können Sie dieses Verhalten optimieren (oder blockieren), indem Sie die relevanten "Swappiness" -Werte im /procDateisystem ändern. Zweifellos gibt es Registrierungswerte, die Sie anpassen können, um das Verhalten von Windows auch in dieser Hinsicht zu ändern.

Eine andere Sache, die Sie beachten sollten, ist, dass der Kernel, wenn etwas ausgelagert und später wieder eingelesen wurde, es nicht aus der Auslagerungsdatei entfernt, bis entweder die Datei anderweitig voll ist oder die Seite im RAM geändert wird. Auf diese Weise kann die Seite, die erneut ausgeblendet werden muss, ohne dass die Seiten tatsächlich auf die Festplatte geschrieben werden müssen: Der Inhalt ist bereits vorhanden. Dies kann die Leistung in Situationen erheblich verbessern, in denen das Überschreiben des Speichers so schlecht geworden ist, dass die Auslagerungsdateien überlastet werden (eine erhebliche Anzahl von Seiten wird ständig ein- und ausgeblendet). Sie werden wahrscheinlich feststellen, dass einige Daten durch diesen Speicherverlust herausgeschoben wurden und seitdem wieder eingelesen, aber nicht von der Festplatte gelöscht wurden, falls diese Seiten zugeordnet werden müssen oder RAM, um später wieder Platz zu schaffen. Unter Linux ist der Wert "SwapCached" in/proc/meminfoZeigt an, wie viele Daten auf Seiten mit identischen Kopien im RAM und auf der Festplatte vorhanden sind. Windows verwendet zweifellos dieselbe Optimierung (oder etwas Ähnliches), aber ich bin nicht genau der richtige Ort, um zu sehen, wie viel dies geschieht (zweifellos gibt es relevante Leistungsüberwachungszähler, die Sie abfragen können).

tl; dr: Das ist normal. Ein moderner Betriebssystemkern versucht, klug zu sein und zu maximieren, wie viel RAM er als Cache zum Speichern von E / A-Vorgängen verwenden kann, und manchmal werden Daten auf die Festplatte und in den RAM kopiert, um E / A zu speichern, wenn diese Bits gelöscht werden müssen von RAM später. Es ist unwahrscheinlich, dass diese Verwendung von Auslagerungsdateien auf diese beiden Arten, auch wenn Sie derzeit nicht über wenig RAM verfügen, Ihre Gesamtleistung verbessert, anstatt sie zu verringern.

David Spillett
quelle