Erläutern der Speichernutzung unter Windows Server außerhalb der Liste der ausgeführten Prozesse

9

Ich habe einen Windows 2003-Server, der etwas langsam läuft, wobei die Festschreibungsgebühr und die Auslastung der Auslagerungsdateien immer höher werden, bis ich schließlich neu starte. Um dies zu beheben, muss ich herausfinden, was den gesamten Speicher verbraucht, und hier liegt das große Rätsel.

Aktuelle Statistiken aus dem Task-Manager:

Physical Memory (K): 2096400
Commit Charge (K):   5364848
Page file usage:     5.11 GB

Gut , also rufen wir den SysInternals Process Explorer auf und überprüfen die Größe des Arbeitssatzes für alles, was ausgeführt wird. Der größte Schuldige ist eine Tomcat-Instanz mit 121.980 KB WS und 481.284 KB VM-Größe. Nichts dort kommt der Erklärung der 5-GB-Festschreibungsgebühr nahe.

Nächster Schritt: SysInternals pslist : pslist -mspaltete die Ausgabe von Spalte und berechnen Spaltensummen für die 61 Prozesse bis die gemeldet werden.

SUM (Working Set)  : 681,484 K
SUM (Private Bytes): 593,424 K

Verstehe ich grundlegend, was die Tools melden? Ich hatte immer den Eindruck, dass ein Betriebssystem tatsächlich viel weniger Speicherplatz beanspruchen würde als die gesamte Menge an virtuellem Speicher, die von einem Prozess zugeordnet wird, unter der Annahme, dass es tatsächlich nie so viel verwendet, und dass dies bei der Betrachtung von VM der Fall ist ein roter Hering.

jpdaigle
quelle
1
Update: Ja, dieses System ist Paging und ich erhalte häufig die Warnung "Der virtuelle Speicher wird knapp". Immer wenn ich die Warnung erhalte, überprüfe ich die Speicherstatistiken und es gibt keinen Prozess, der sich besonders schlecht zu verhalten scheint, aber der Status "Speicher, festgeschriebene Bytes" liegt immer über 5 GB.
jpdaigle

Antworten:

1

JP, ich glaube, Ihr Kommentar, dass dies ein automatisierter Build- / Unit-Test-Server ist, auf dem weniger als stabiler Code ausgeführt wird, sagt alles. Ich vermute, dass dieser Server häufig neu gestartet werden muss, da der darauf ausgeführte instabile Code wahrscheinlich Speicherlecks aufweist, die zu den Symptomen führen, die Sie sehen. Speicherlecks werden in keinem der Prozessbäume laufender Prozesse aufgeführt, da es sich um Speicher handelt, der von Prozessen erfasst wird, die nicht mehr vorhanden sind und weiterhin zugewiesen werden, obwohl der mit ihnen verknüpfte Prozess längst nicht mehr vorhanden ist.

Erhalten Sie ein häufiges Wartungsfenster, in dem Sie diesen Computer automatisch neu starten können, möglicherweise nachts, ein paar Mal pro Woche oder wöchentlich, je nachdem, mit welcher Geschwindigkeit dieses Verhalten Leistungsprobleme aufweist.

Wir haben vor einiger Zeit Oracle Application Server-Server auf Windoze, die zweimal täglich neu gestartet werden mussten. Wir haben die Benutzer jeden Tag zur Mittagszeit und mitten in der Nacht rausgeschmissen. Das war vor ein paar Jahren, mit angeblich stabilem Produktionscode von Oracle.

Kevin K.
quelle
2

Es tut uns leid, nur einige Links einzufügen - aber wir haben einige Techniken verwendet, um Speicherlecks mithilfe von Logparser und Powershell zu finden, also werde ich sie teilen.

http://blogs.msdn.com/debuggingtoolbox/archive/2008/08/22/powershell-script-chart-and-statistics-from-top-20-objects-leaking.aspx

(Die Never Doubt Thy Debugger-Website ist ausgezeichnet): http://blogs.msdn.com/carloc/archive/2007/09/14/something-you-need-to-know-before-start-debugging.aspx

Ich werde auch einen Link zu Mark Russinovichs hervorragendem Einblick in die Speichernutzung unter Windows bereitstellen:

http://blogs.technet.com/markrussinovich/search.aspx?q=memory&p=1

Kurz vor dem Öffnen aktueller Microsoft-Fälle enthält die Performance Team-Website auch viele gute Informationen: http://blogs.technet.com/askperf/Default.aspx?p=2

mctsonic
quelle
1

Das Hauptwerkzeug zur Diagnose ist Perfmon. Die Zähler, die ich mir (zunächst) ansehen würde, sind:

Speicher,
festgeschriebene Bytes Dies ist ein Maß für den Bedarf an virtuellem Speicher. Prozess, Arbeitssatz, _Gesamter virtueller Speicher in "aktiv"
Paging-Datei verwenden,% Auslagerungsdatei verwenden
, Seiten / Sek. (Dies ist nicht unbedingt ein Indikator für geringen Speicher , obwohl jeder davon auszugehen scheint)
Speicher, Seitenausgabe / Sek. Wie viele virtuelle Speicherseiten wurden in die Auslagerungsdatei geschrieben, um RAM-Seitenrahmen für andere Zwecke pro Sekunde freizugeben

Speicher, Cache Bytes
Speicher, Pool Nonpaged Bytes
Speicher, Pool Paged Bytes
Speicher, System Code Total Bytes
Speicher, Systemtreiber Total Bytes

Wenn sich diese Summe 2 GB nähert, treten normalerweise Leistungsprobleme aufgrund der 32-Bit-Architektur auf

Speicher, verfügbare MByte - Hiermit wird gemessen, wie viel RAM verfügbar ist, um die Anforderungen an den virtuellen Speicher zu erfüllen (entweder neue Zuordnungen oder zum Wiederherstellen einer Seite aus der Auslagerungsdatei).

Siehe auch http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm

Jim B.
quelle
Interessanter Link. Auf diesem Server wird der gesamte Prozessarbeitssatz auf 640 MB angezeigt, aber "Speicher, festgeschriebene Bytes" beträgt 5,4 GB. Keiner der anderen von Ihnen genannten Zähler ist sehr hoch. Ich erhalte häufig die Warnung "Der virtuelle Speicher wird knapp", weshalb ich nachforsche. Kommentar zum OP hinzufügen.
jpdaigle
1

Wie lange läuft dieser Server seit dem letzten Neustart? Es ist eine unglückliche Tatsache im Leben, dass Windows Speicherlecks aufweist. dh Der zugewiesene Speicher wird nicht immer an das System zurückgegeben. Die Symptome sind genau das, was Sie sehen. Wenn Sie dies noch nicht tun, würde ich empfehlen, mindestens einmal pro Woche einen Neustart durchzuführen. Viele Rechenzentren starten Windows jeden Tag neu, da dadurch Supportanrufe erheblich reduziert werden. Natürlich ist das viel einfacher, wenn Sie Cluster verwenden, da es keine Ausfallzeiten gibt.

John Gardeniers
quelle
0

Es wird gesagt, dass es irgendwo einen Systemadministrator gibt, der die Windows-Speicherstatistiken wirklich versteht, aber ich habe sie nie getroffen.

Es ist jedoch normalerweise nicht zu schwierig, einen Prozess zu finden, der sich schlecht verhält. Versuchen Sie, mit Perfmon die verschiedenen Prozesszähler wie Handles oder Seitenfehler / Sek. Zu betrachten.

JR

Weitere Gedanken: Sind Sie sicher, dass Ihnen tatsächlich wenig Speicherplatz zur Verfügung steht? Der Schlüssel ist, ob Sie Paging bekommen. Wenn es kein Paging gibt, fehlt Ihnen nicht der Speicher. Mit PerfMon sehen Sie sich den Zähler Memory - Pages / sec an.

John Rennie
quelle
Ich sehe nichts Offensichtliches in den laufenden Prozessen. Gibt es eine Möglichkeit, dass der Speicher vom Betriebssystem nach dem Beenden eines Prozesses nicht zurückgefordert wird? Dies ist ein automatisierter Build- / Unit-Test-Server, sodass Prozesse natürlich immer abstürzen, da immer aktuelle Builds ausgeführt werden, die automatisch aus SVN erstellt werden.
jpdaigle
Siehe meine Bearbeitung für einige weitere Gedanken
John Rennie
0

Denken Sie daran, dass der Arbeitssatz das Speicherbit ist, das tatsächlich durch den REALEN physischen Speicher dargestellt wird. Sie haben auch eine Gebühr für den virtuellen Speicher, und Windows führt die Codepage-Freigabe durch. Einige Teile von MFC werden für viele, viele Prozesse freigegeben, ohne dass die Speichernutzung dupliziert wird. Außerdem haben Sie unablässig den Wunsch von Windows, den Dateisystem-Cache so groß wie möglich zu halten (ich habe bereits gesehen, dass er auf einem 2,5-GB-Laptop auf 800 MB ansteigt).

Die Windows-Speicherverwaltung ist sehr robust. Sobald Windows jedoch mit dem Paging beginnt, werden die Dinge hässlich und Sie müssen IMMER Platz für den Dateisystem-Cache lassen - immer immer immer. Ich muss Firefox routinemäßig herunterfahren und neu starten, wenn meine über 80 Registerkarten einen Speicherverbrauch von bis zu 1,2 GB / 1,2 + GB haben.

Windows verwischt auch die Linie ein wenig zwischen Seiten, die sich im Cache befinden, und Seiten, die als Speicher / Arbeitssatz aufgeführt sind.

Chris K.
quelle