Was ist mit meinem Swap (Ubuntu)?

30

Ich habe einen Ubuntu 8.04-Server, auf dem eine Datenbank und eine Reihe von Java-Anwendungsservern ausgeführt werden. Die Speicherkonfiguration und -nutzung ist:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

Mir ist aufgefallen, dass der Swap jeden Nachmittag steigt und irgendwann nachts wieder freigegeben wird. Die Nachfrage ist nicht an allen Tagen gleich und beginnt zu unterschiedlichen Zeiten. Es ist also ziemlich zufällig, abgesehen von der unscharfen Grenze zwischen Nachmittag und Nacht.

Die Belastung dieser Maschine variiert im Laufe des Tages. Es ist sehr niedrig zwischen Mitternacht und 6-7 Uhr, viel höher (aber stabil) bis 6-8 Uhr und fällt dann allmählich ab.

Jetzt habe ich folgende Fragen:

  1. Wie kann ich sehen, welche Prozesse Swap verwenden?
  2. Warum wird es vorgezogen, Speicher aus dem Cache zu entfernen, anstatt ihn auszutauschen?
Konrad Garus
quelle

Antworten:

25

Die von Ihnen beschriebenen Swap-Nutzungsmuster klingen nicht überraschend. Sie stimmen mit einigen permanent laufenden Prozessen überein, die selten genutzte Seiten haben. Tagsüber sind aufgrund der hohen Aktivität die selten genutzten Seiten fast immer im Tausch. Nachts haben sie mehr Platz im RAM.

Sie können einen Blick darauf werfen, wie viel Arbeitsspeicher die einzelnen Prozesse in topoder verwenden htop. Standardmäßig wird keine Swap-Nutzung angezeigt, aber beide können konfiguriert werden (oben: Drücken fund Einschalten der SWAPSpalte; oben: Drücken F2, Hinzufügen der NSWAPSpalte). Sie können weitere Informationen zu einem bestimmten Prozess erhalten, cat /proc/12345/vmstatindem Sie 12345die Prozess-ID angeben. Beachten Sie, dass "wie viel Swap ein Programm verwendet" nicht vollständig definiert ist, da einige Seiten von mehreren Prozessen gemeinsam genutzt werden.

Es gibt zwei Hauptkonkurrenten für RAM: Prozessspeicher (der ausgelagert werden kann) und Festplatten-Caches (der aus einer Datei erneut gelesen werden kann). Es gibt keinen Grund, den Prozessspeicher immer vor den Festplatten-Caches zu priorisieren: Es ist besser, einen selten genutzten Teil des Prozessspeichers auszutauschen, als eine Datei immer wieder in den Speicher einzulesen. Die Zahlen, die Sie angeben, wobei etwa die Hälfte (etwa 30% –70%) des Arbeitsspeichers für Festplatten-Caches vorgesehen ist, sind typisch für Systeme, die über ausreichend RAM für die Aufgaben verfügen, die sie ausführen sollen.

Gilles 'SO - hör auf böse zu sein'
quelle
6
Ich kann keine NSWAPSpalte finden (Ubuntu 16.04: /).
jjmontes
1
@jjmontes Es wurde entfernt . Ich weiß nicht warum.
Gilles 'SO- hör auf böse zu sein'
Die häufig gestellten Fragen (FAQs) besagen, dass der Autor nicht glaubt, dass es möglich ist, die Auslagerungsnutzung genau zu melden, und dass die Metrik des Top ungenau ist.
Oliver Evans
0

Auf StackOverflow gibt es bereits eine hervorragende Antwort auf Ihre erste Frage ("Welcher Prozess verwendet tatsächlich Swap?").

https://stackoverflow.com/a/7180078/1442301

Kurz gesagt, Tools wie topoder htopliefern überhaupt keine genauen Informationen zur Auslagerungsnutzung. Sie sollten in den /procOrdner (in der Pseudodatei /proc/$PID/smaps) eintauchen , um genauere Informationen zu erhalten.

Der oben erwähnte Beitrag enthält ein kurzes Shell-Skript, um diese Informationen auf nette Weise wiederzugeben.

Xavier
quelle
0

Mit htop v1.01drückte ich „S“ hinzufügen NSWAPSpalte statt „F2“ (wie Gilles vorgeschlagen), dann Columns> Available Columns> und F5es hinzuzufügen.

Bildbeschreibung hier eingeben

Genjo
quelle
Ich habe HTC 2.0.1 und ich sehe nicht die NSWAP-Option :(
Adam
1
@Adam Der Maintener möchte diese Spalte nicht mehr anzeigen, da diese Informationen nicht zuverlässig abgerufen werden können. Siehe Warum hat htop keine SWAP-Spalte wie oben?
Genjo
0

Ohne Polling und Analysieren der Ausgänge von Werkzeugen wie vmstat, freeund topder beste Ort , um aussehen könnte crontabs des Root - Benutzer oder andere Benutzer auf dem System. Wenn die allgemeine Systemlast zu einem bestimmten Zeitpunkt zuverlässig ansteigt, besteht die Möglichkeit, dass ein Prozess in cron den Bedarf an Ressourcen verursacht. Andernfalls können Sie mit dem scriptDienstprogramm immer ein Ghetto-Wegwerfprotokoll erstellen , das nur alles aufzeichnet, was an das STDOUT gesendet wird.

Wenn ich also ein einmaliges Wegwerfskript ausführen müsste, um die Ausgabe für eine spätere Überprüfung aufzufangen, würde ich in einem Terminal Folgendes eingeben:

script /tmp/free.txt

und dann

while (true); do date; free; sleep 30; done

und in einem anderen Terminal

script /tmp/top.txt

und dann

while (true); do date; top -n 1; sleep 30; done

und dann töte am nächsten Morgen beide scriptAufrufe und passe die Ausgabe von topund anfree

Auch dies ist ein Ghetto-Ansatz, aber es klingt so, als ob Sie nur ein einziges Mal brauchen

Vielleicht möchten Sie auch die Ubuntu-Tauschanleitung lesen

Brad Clawsie
quelle