Wie kann ich feststellen, ob mein Windows-Server ausgetauscht wird?

29

Ich verwende Process Explorer, um meinen Windows-Server zu überwachen, während er einige Daten rekonstruiert. Es ist in erster Linie ein CPU-intensiver Prozess, aber ich möchte sicherstellen, dass er nicht ausgetauscht wird. Wie kann ich feststellen, ob Process Explorer verwendet wird? Meine erste Vermutung ist im Systeminformationsfenster, es ist Paging File Write Delta. Ja? Nein? Ich bin ein Idiot?

* Screenshot ist nicht vom Server ... nur ein Beispiel.

Alternativtext http://www.malwareinfo.org/bootcamp/img/ProcessExplorer2.jpg

churnd
quelle

Antworten:

30

"Seiteneingabe / Sek. Ist der zu überwachende Zähler, aber Sie sollten sich keine Gedanken darüber machen, wie Windows die Auslagerungsdatei nicht wie * nixes verwendet.

Zuerst müssen Sie verstehen, dass Windows-Seiten nicht rauskommen. Ich zitiere den relevanten Teil von Eric Lipperts Blogpost (leicht bearbeitet), da ich es selbst nicht besser sagen kann:

"RAM kann nur als Leistungsoptimierung angesehen werden. Der Zugriff auf Daten im RAM, in denen die Informationen in elektrischen Feldern gespeichert sind, die sich in der Nähe der Lichtgeschwindigkeit ausbreiten, ist viel schneller als der Zugriff auf Daten auf der Festplatte, in denen Informationen in enormen Mengen gespeichert sind Eisenmetallmoleküle

Das Betriebssystem verfolgt, auf welche Speicherseiten von welchen Prozessen am häufigsten zugegriffen wird, und erstellt eine Kopie davon im RAM, um die Geschwindigkeit zu erhöhen. Wenn ein Prozess auf einen Zeiger zugreift, der einer Seite entspricht, die derzeit nicht im RAM zwischengespeichert ist, führt das Betriebssystem einen "Seitenfehler" aus, geht zur Festplatte und erstellt eine Kopie der Seite von der Festplatte zum RAM, wobei die vernünftige Annahme getroffen wird dass bald wieder darauf zugegriffen werden kann.

Das Betriebssystem ist auch sehr klug, wenn es darum geht, schreibgeschützte Ressourcen freizugeben. Wenn zwei Prozesse dieselbe Codeseite aus derselben DLL laden, kann das Betriebssystem den RAM-Cache zwischen den beiden Prozessen gemeinsam nutzen. Da der Code vermutlich durch keinen der beiden Vorgänge geändert wird, ist es durchaus sinnvoll, die duplizierte Seite des Arbeitsspeichers durch gemeinsame Nutzung zu speichern.

Aber selbst mit cleverem Sharing wird diesem Caching-System irgendwann der Arbeitsspeicher ausgehen. In diesem Fall schätzt das Betriebssystem, auf welche Seiten in Kürze am wenigsten zugegriffen werden kann, schreibt sie auf die Festplatte, wenn sie geändert wurden, und gibt den Arbeitsspeicher frei, um etwas einzulesen, auf das mit höherer Wahrscheinlichkeit erneut zugegriffen werden kann bald.

Wenn das Betriebssystem falsch vermutet oder wenn einfach nicht genug RAM vorhanden ist, um alle häufig verwendeten Seiten in allen laufenden Prozessen zu speichern, beginnt der Computer mit dem „Thrashing“. Das Betriebssystem verbringt die ganze Zeit mit dem Schreiben und Lesen des teuren Festplattenspeichers, die Festplatte läuft ständig und Sie erledigen keine Arbeit.

Dies bedeutet auch, dass "Nicht genügend RAM" selten zu einem "Nicht genügend Arbeitsspeicher" -Fehler führt. Anstelle eines Fehlers führt dies zu einer schlechten Leistung, da die vollen Kosten der Tatsache, dass sich der Speicher tatsächlich auf der Festplatte befindet, plötzlich relevant werden.

Eine andere Sichtweise ist, dass die Gesamtmenge an virtuellem Speicher, die Ihr Programm verbraucht, für seine Leistung nicht wirklich relevant ist. Was relevant ist, ist nicht die Gesamtmenge des verbrauchten virtuellen Speichers, sondern (1) wie viel dieses Speichers nicht mit anderen Prozessen geteilt wird, (2) wie groß die "Arbeitsmenge" der häufig verwendeten Seiten ist und ( 3) ob die Arbeitssätze aller aktiven Prozesse größer sind als der verfügbare RAM.

Inzwischen sollte klar sein, warum Fehler aufgrund von "Nicht genügend Arbeitsspeicher" normalerweise nichts damit zu tun haben, wie viel physischer Arbeitsspeicher Sie haben oder wie viel Speicher verfügbar ist. Es geht fast immer um den Adressraum, der unter 32-Bit-Windows relativ klein und leicht fragmentiert ist. "

Ein paar zusätzliche Punkte:

  1. DLLs und Programmdateien werden immer nur ein- und nie ausgelagert, da sie sich bereits auf der Festplatte befinden (und in der Regel werden die ersten Seiten freigegeben, wenn der physische RAM fast leer ist).
  2. Es ist weitaus wahrscheinlicher, dass Ihnen die freien Seitentabelleneinträge ausgehen oder dass Sie mehr Speicherplatz benötigen als bei anderen Speicherproblemen (abgesehen von der bereits erwähnten insgesamt schlechten Leistung)
  3. Selbst wenn Sie keine Auslagerungsdatei ausführen, können Seitenfehler auftreten
  4. Im Allgemeinen sagt der Blick auf den festgeschriebenen Speicher mehr darüber aus, wie ein Prozess Speicher verwendet

Ein vollständiges Bild der Speicherverwaltung in Windows finden Sie unter

Der Virtual-Memory-Manager in Windows NT

Wenn Sie glauben, dass Sie ein Speicherproblem haben, empfehle ich zunächst, diese Präsentation zur Fehlerbehebung bei Windows-Speicher zu lesen

Hier ist eine großartige Erklärung, warum manchmal "kein Speicher mehr vorhanden" ist, wenn Sie sich nicht aufgrund einer Speicherfragmentierung befinden:

Siehe auch Grenzen von Windows verschieben: Physischer Speicher

Weitere Informationen zu virtuellem Speicher, Speicherfragmentierung und -lecks sowie WOW64

RAM, virtueller Speicher, Auslagerungsdatei und all das Zeug (Microsoft-Unterstützung)

Aktualisieren:

Windows 10 macht etwas anderes mit dem Speicher und im Laufe der Zeit wird ein Prozess namens "System und komprimierter Speicher" angezeigt. Windows 10 fügt der Auslagerungsliste einen "Komprimierungsspeicher" hinzu. Bei diesem RAM handelt es sich um USER-Speicher, der dem System gehört (normalerweise hatte das System nur Kernel-Speicher). Dieser Speicher wird an Ort und Stelle komprimiert, um eine durchschnittliche Reduzierung auf etwa 30% zu erreichen. Auf diese Weise können mehr Seiten im Speicher abgelegt werden (für diejenigen, die rechnen, ist das 70% mehr Speicherplatz). Beachten Sie, dass Seiten aus dem Komprimierungsspeicher (Benutzermodus Systemprozessraum) auf den geänderten Speicherplatz abgelegt werden können, wenn der Speicher immer noch unter Druck steht Liste (komprimiert), die dann in die physische Auslagerungsdatei geschrieben werden kann. Das System erkennt, dass sie aus dem Benutzermodus des Systems stammen und komprimiert sind, und versucht nicht, sie wieder in den Speicher zu stellen. Auf Windows 10-Systemen sieht es also so aus, als würde das System RAM inhalieren. Tatsächlich wird jedoch nur versucht, die Verwendung von RAM effizienter zu gestalten. Mac-Benutzer verwenden seit 2013 eine ähnliche Funktion, und neuere Versionen des Linux-Kernels verwenden eine Version der Speicherkomprimierung. Diese Methode zur Erhaltung des Arbeitsspeichers ist nicht nur besser, sondern auch bei anderen Betriebssystemen bereits üblich.

Jim B
quelle
6

Ja, die Paging-Deltas geben Ihnen einen Live-Hinweis darauf, wie viel der Server pagt (oder "austauscht"), aber nur in diesem Moment. Um dies genauer zu beobachten und eine historische Ansicht zu erhalten, würde ich die Verwendung des Systemmonitors ( perfmon.exe ) vorschlagen , um diese Deltas (und andere Leistungsindikatoren von Interesse, die dazu beitragen können, bestimmte Ereignisse oder Aktivitäten mit Spitzen in zu korrelieren ) zu zeichnen oder aufzuzeichnen Paging-Aktivität).

Jessica McKinnon
quelle
5

Performance Monitor (perfmon) ist dein Freund hier. Sie suchen nach harten Seitenfehlern (d. H. Seitenfehlern, wenn die zur Erfüllung der Anforderung erforderliche Speicherseite von der Festplatte gelesen werden muss), sodass die Überwachung von harten und weichen Seitenfehlern nicht optimal ist.

Beobachten Sie den "Pages Input / sec" -Zähler im "Memory" -Objekt mit perfmon, um ein Gefühl dafür zu bekommen, wie viele harte Seitenfehler auftreten.

Evan Anderson
quelle
0

Eine gute Faustregel ist, dass, wenn Ihre Festschreibegebühr höher ist als Ihr physischer Speicher, Sie definitiv etwas auslagern , aber wenn Ihre App einen einzelnen festen Datenpuffer verwendet, der immer in Gebrauch bleibt, wird er im Allgemeinen nicht ausgelagert überhaupt nicht. Beim Start kann es zu Verzögerungen kommen, während ein anderer Speicher ausgelagert wird, um Platz dafür zu schaffen.

Maximus Minimus
quelle
3
mh: Ich bin mir nicht sicher, ob ich Ihrer Faustregel zustimme. Wenn die Commit Ladung höher als physischer Speicher ist, bedeutet , dass einfach , dass etwas war an einem gewissen Punkt ausgelagert, aber das System ist nicht unbedingt noch etwas Paging. Etwas wird nur ausgelagert, wenn ein Seitenfehler auftritt. Ansonsten stimme ich zu, dass die Verwendung eines einzelnen festen Datenpuffers am besten wäre, aber dann bewegen wir uns wahrscheinlich in den Bereich von stackoverflow.com
Jessica McKinnon,
Meine schlechte, ich hätte sagen sollen "etwas wurde in der Vergangenheit getauscht, und zukünftige Speicheranforderungen müssen auch getauscht werden".
Maximus Minimus
Dies ist nicht unbedingt wahr, eine Anwendung kann nur Seiten im Speicher sperren, die dieses Betriebssystem-Privileg haben.
Jim B