Auf meinem System habe ich einige Swap verwendet:
undefine@uml:~$ free
total used free shared buffers cached
Mem: 16109684 15848264 261420 633496 48668 6096984
-/+ buffers/cache: 9702612 6407072
Swap: 15622140 604 15621536
Wie kann ich überprüfen, was sich im Swap befindet?
Ich versuche es über Prozesse zu überprüfen, aber für jede PID auf dem System ist VmSwap 0:
undefine@uml:~$ awk '/VmSwap/ {print $2}' /proc/*/status |uniq
0
Was kann man sonst noch tauschen? Ich habe über tmpfs nachgedacht - aber ich habe alle Dateien auf tmpfs-es erneut gelesen - und die Swap-Größe wird nicht bereinigt.
VmSwap
Zeile in angezeigten Wert zurück/proc/PID/status
? Bei der Frage geht es nicht um eine schönere Anzeige, sondern darum, was außer Prozessdaten im Swap enthalten sein könnte.Ich habe erst gestern angefangen, mich damit zu befassen, was ich bisher gefunden habe:
SWAP_USED = Used_by_Processes + SwapCached + Part_of_Tmpfs + something_else
Kurzgeschichte:
Used_by_Processes - Daten, die vollständig aus dem Speicher ausgelagert wurden .
SwapCached - Daten, die auf die Festplatte ausgelagert wurden , sich aber noch im Speicher befinden.
Part_of_Tmpfs - Ein Teil der tmpfs-Daten.
Lange Geschichte:
Used_by_Processes - es gibt viele Anleitungen, wie man diese falsch berechnet;) ZB wenn wir alle
VmSwap
Einträge von/proc/*/status
oderSwap
Einträge von zusammenfassen, erhalten/proc/*/smaps
wir eine Überschätzung (geteilte getauschte Seiten können mehrmals gezählt werden). Wenn wir es nicht vomroot
Benutzer oder von unserem Betriebssystem ausführen, wird die unterschätzte Anzahl stillschweigend zurückgegeben. Ich habe nicht eine richtige Art und Weise geteilt Seiten zu identifizieren, aber Verspritzen von gleichen ‚Karten‘ gibt viele bessere Annäherung als andere Ansätze: (beachten Sie, dasscat
unter nicht nutzlos ist und tatsächlich braucht ein2>/dev/null
)SwapCached - dieses ist unkompliziert und kann sauber extrahiert werden
/proc/meminfo
. Einige Leute würden nicht erwarten, dass dies als "verbrauchter" Tausch gewertet wird, da eine doppelte (nicht verschmutzte) Kopie derselben Seite sowohl im RAM als auch im Swap auf beiden Seiten ziemlich sofort freigegeben werden kann (falls Bedarf besteht) eine der Kopien "befreit".Part_of_Tmpfs - die gute Seite ist, dass, wenn alle Ihre tmpfs-Daten viele Tage unberührt sind und
swappiness
nicht Null sind, es sehr wahrscheinlich ist, dass ganze tmpfs ausgetauscht werden (und umgekehrt für kürzlich verwendete Daten). Der Nachteil ist, dass ich keine API gefunden habe, die den Schwellenwert oder den Prozentsatz der Auslagerungsmenge zuverlässig berechnet. Wenn jedoch genügend RAM vorhanden ist, können wir ganze tmpfs-Daten in diese kopieren/dev/null
und so einen Hinweis darauf erhalten, wie viel davon ausgelagert wurde.Häufige Fehler bei der Berechnung der tmpfs-Größe sind - vorausgesetzt, dies
/dev/shm
ist der einzige konfigurierte tmpfs oder der Versuch, dies durch rekursives Scannen pro Datei zu tun (bei Implementierungen werden nicht nur versteckte Dateien ausgelassenroot
, sondern auch nicht ausgetauscht) einige Seiten beim Überqueren). Viel einfacher ist es, gute alte zu verwendendf
.something_else - siehe "
diff 385 MB
" unten, benötigt einen Einblick in die Kernelquellen. Siehe mein Skript:und die Ausgabe von verschiedenen Boxen:
Und ein kleines Experiment als Bonus:
PS: Abgesehen von der oben erwähnten Annäherung gibt es andere Fehlerquellen, wie das Runden von KB in MB, die theoretische Möglichkeit einer Nichtübereinstimmung zwischen den Blockgrößen von RAM und Swap usw. Ich bin mir nicht sicher, ob dies alles abdeckt, hoffe es aber hilft in gewissem Maße :)
quelle