Wie kann ich herausfinden, dass Prozesse Swap Space verwenden?

10

Ich habe einen Linux-Server Top-Berichte über 9 GB Swap verwendet: oben

Aber ich kann nicht herausfinden, wo es Swap verwendet. Einige Google-Ergebnisse besagten, dass top- Ocommad follow by pdie Swap-Nutzung pro Prozess anzeigt . Wie im obigen Bild gezeigt, zeigt eine kurze Summe der SWAP-Spalte, dass> 10 GB Swap verwendet werden. Woher kommt also die 9 GB-Zahl für die Swap-Nutzung?

Top berichtet, dass etwa 96492 KB RAM von Puffern verwendet werden. Kann ich irgendetwas tun, um dies zu nutzen, anstatt Swap zu verwenden?

secmask
quelle
1
top (laut Manpage) berechnet SWAP als VIRTUAL - PHYSICAL RAM-Nutzung. Nicht ganz genau aus meinen Experimenten.
Lornix

Antworten:

6

Es ist möglich, dass mehrere Programme denselben Auslagerungsbereich verwenden, sodass er zweimal gemeldet wird.

Es ist nicht nötig, Linux anzuweisen, den gepufferten Bereich anstelle von Swap zu verwenden - es ist bereits sehr klug, was es tut. Wenn Sie 9 GB Swap und 9 GB Puffer verwenden, ist das eine gute Sache. Das bedeutet, dass Linux erkennt, dass 9 GB in den Speicher geladenes Material nicht aktiv verwendet werden. Daher ist es effizienter, es auf die Festplatte zu tauschen, damit Sie Der Puffer kann größer werden und Ihre Leistung verbessern.


BEARBEITEN: Wenn Sie den gesamten von jedem Prozess verwendeten Speicher addieren, erhalten Sie auch viel mehr als Ihren physischen RAM. Dies liegt daran, dass gemeinsam genutzte Bibliotheken von mehreren Programmen verwendet werden und dass Linux mit Gabeln umgeht. Es wird nicht das gesamte Programm im Speicher dupliziert, sondern nur die Teile, die sich zwischen den beiden Instanzen unterscheiden. In einigen Fällen kann der Videospeicher als Teil eines X-Prozesses angezeigt werden - ich denke, die alten Voodoo3-Karten haben dies getan. Es kann auch andere Fälle geben, in denen der "Phantomspeicher" ebenfalls oben angezeigt wird.

Schwach
quelle
Ich denke nicht, dass gemeinsam genutzte Bibliotheken als Swap gelten sollten, da beim Systemstart kein Swap verwendet wird, aber bereits viele gemeinsam genutzte Bibliotheken geladen sind. Wie auch immer, ich sehe, dass mein System ungefähr 9 GB Swap-Partition verwendet. Ich möchte nur herausfinden, welcher Prozess den größten Teil des Swaps verwendet hat (Freigabebibliotheken, Speicherzuordnungsdatei ausschließen ...)
secmask
3

Das Parsen des Unterverzeichnisses / proc funktioniert:

Als Bash-Skript:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

Die Ausgabe kann Hi-Lo durch Piping sortiert werden, um zu sortieren:

{blah}| sort -rn

Schreiben Sie dies natürlich in Ihrer Lieblingssprache der Woche nach Ihren Wünschen um. Mein Awk-Fu ist nicht stark.

(cut-n-pastable)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr
lornix
quelle
1

Alternativer Weg:

smem -s swap -r
Kirill Feoktistov
quelle