Systemeinblicke mit Kommandozeilentools: free und vmstat

·5 min·Andreas Haerter·

Hinweis: Dieser Artikel erschien vorab in in englischer Sprache im Fedora Magazin.

Im fĂŒnften Artikel der Serie “Systemeinblicke mit Kommandozeilen-Tools” erkunden wir free und vmstat, zwei kleine Hilfsprogramme, die ĂŒberraschend viel ĂŒber die Gesundheit eines Linux-Systems verraten. free gibt einen sofortigen Überblick darĂŒber, wie RAM und Swap verwendet werden. vmstat (der Virtual Memory Statistics Reporter) liefert eine Echtzeitansicht von Speicher-, CPU- und I/O-AktivitĂ€ten.

Am Ende dieses Artikels lassen sich Puffer und Cache in “Bewegungsraum” ĂŒbersetzen, die geheimnisvolle available-Spalte sicher interpretieren und Speicherlecks oder I/O-SĂ€ttigung erkennen.

Ein kurzer Überblick: free

Nutzung

$ free -h
       total    used    free   shared  buff/cache  available
Mem:    23Gi    14Gi   575Mi    3,3Gi        12Gi      8,8Gi
Swap:  8,0Gi   6,6Gi   1,4Gi

free parst /proc/meminfo und zeigt Gesamtwerte fĂŒr physischen Speicher und Swap sowie Kernel-Puffer und Cache an. NĂŒtzliche Optionen sind -h fĂŒr menschenlesbare Einheiten, -s 1 fĂŒr eine sekĂŒndliche Aktualisierung und -c N zum automatischen Stoppen nach N Stichproben. Letzteres ist besonders praktisch, um einen Trend zu verfolgen, wĂ€hrend parallel andere Programme ausgefĂŒhrt werden. Beispielsweise liefert free -s 60 -c 1440 einen 24-Stunden-CSV-freundlichen Datensatz ohne Installation zusĂ€tzlicher Monitoring-Daemons oder Tools.

Freier Speicher (free) bezieht sich auf RAM, der völlig unbelegt ist. Er wird weder von einem Prozess verwendet noch zum Zwischenspeichern. Bei Serversystemen wird dies oft als Verschwendung betrachtet, da ungenutzter Speicher nicht zur Leistung beitrÀgt. Idealerweise sollte diese Zahl niedrig bleiben, nachdem ein System eine Weile gelaufen ist.

VerfĂŒgbarer Speicher (available) hingegen stellt eine SchĂ€tzung dar, wie viel Speicher von neuen oder laufenden Prozessen verwendet werden kann, ohne auf Swap (also die Auslagerungsdatei oder -partition) zurĂŒckgreifen zu mĂŒssen. Dies umfasst freien Speicher plus Teile des Caches und der Puffer, die das System bei Bedarf schnell zurĂŒckgewinnen kann.

Im Wesentlichen liegt der Unterschied in Linux hier: freier Speicher ist untĂ€tig und ungenutzt, wĂ€hrend verfĂŒgbarer Speicher sowohl wirklich freien Platz als auch Speicher umfasst, der leicht freigegeben werden kann, um das System reaktionsfĂ€hig zu halten, ohne zu swappen / auszulagern. Es ist kein Problem, wenig freien Speicher zu haben; verfĂŒgbarer Speicher ist normalerweise das, worĂŒber man sich Sorgen machen sollte.

Ein gesundes System könnte sogar used ≈ total zeigen und dennoch bleibt available groß; dies spiegelt hauptsĂ€chlich den Cache bei der Arbeit wider. Der Linux-Kernel wird automatisch saubere Cache-Seiten verwerfen, wann immer eine Anwendung den Platz benötigt, sodass zwischengespeicherter Speicher nicht verschwendet ist. Dies lĂ€sst sich als „working set“ betrachten, welches nur noch nicht neu zugewiesen wurde.

Probleme mit free erkennen

  • Schnell schrumpfendes available kombiniert mit steigendem swap used deutet auf echten Speicherdruck hin.
  • Große Swap-In/Out-Spitzen weisen auf thrashing-Arbeitslasten oder außer Kontrolle geratene Speicherverbraucher hin.

vmstat – Virtual Memory Statistics melden

vmstat (Virtual Memory Statistics) zeigt Prozesse, Speicher, Paging, Block-I/O, Interrupts, Context-Switches und CPU-Auslastung in einer einzigen Zeile an. Mit einem Intervall und einer Anzahl ausgefĂŒhrt lassen sich Trends beobachten (die unten gezeigte Ausgabe wurde zur besseren Lesbarkeit in drei Abschnitte aufgeteilt):

$ vmstat 1 3
procs -----------memory----------
 r  b   swpd   free   buff  cache
 2  0 7102404 1392528     36 12335148
 0  0 7102404 1392560     36 12335188
 0  0 7102404 1373640     36 12349928

 ---swap-- -----io----
  si   so    bi    bo
   8   21   130   724
   0    0     0     0
   0    0     8    48

 -system-- -------cpu-------
 in     cs us sy id wa st gu
 2851   19 15  7 77  0  0  0
 5779 7246 14 10 77  0  0  0
 5141 6525 12  9 79  0  0  0

ErklÀrung der Ausgabe

Aus der vmstat(8) Manpage:

Procs
    r: The number of runnable processes (running or waiting
       for run time).
    b: The number of processes blocked waiting for I/O to
       complete.

Memory
    These are affected by the --unit option.
    swpd: the amount of swap memory used.
    free: the amount of idle memory.
    buff: the amount of memory used as buffers.
    cache: the amount of memory used as cache.
    inact: the amount of inactive memory.  (-a option)
    active: the amount of active memory.  (-a option)

Swap
    These are affected by the --unit option.
    si: Amount of memory swapped in from disk (/s).
    so: Amount of memory swapped to disk (/s).

IO
    bi: Kibibyte received from a block device (KiB/s).
    bo: Kibibyte sent to a block device (KiB/s).

System
    in: The number of interrupts per second, including
        the clock.
    cs: The number of context switches per second.

CPU
    These are percentages of total CPU time.
    us: Time spent running non-kernel code.  (user time,
        including nice time)
    sy: Time spent running kernel code.  (system time)
    id: Time spent idle.  Prior to Linux 2.5.41, this
        includes IO-wait time.
    wa: Time spent waiting for IO.  Prior to Linux 2.5.41,
        included in idle.
    st: Time stolen from a virtual machine.  Prior to
        Linux 2.6.11, unknown.
    gu: Time spent running KVM guest code (guest time,
        including guest nice).

Praktische Diagnose

BereichWichtige FelderWorauf zu achten ist
Procsr (Run-Queue),
b (blocked)
r > CPU-Kerne = Konkurrenz um die gleichen Kerne
Memoryswpd, free, buff, cacheSteigendes swpd mit fallendem free = Druck
Swapsi, soso ungleich Null bedeutet, dass der Kernel auslagert (swapped)
IObi, boHohes bo + hohes wa deutet auf schreiblastige Arbeitslasten hin
Systemin, csPlötzliche Spitzen deuten auf Interrupt-StĂŒrme hin
CPUus, sy, id, wa, stHohes wa (I/O-Wait) = Storage-Engpass

Ein Speicherleck (Memory Leak) entdecken

Man fĂŒhrt vmstat 500 in einem Terminal aus, wĂ€hrend die verdĂ€chtige Anwendung in einem weiteren Terminal lĂ€uft. Wenn free kontinuierlich fĂ€llt und si/so in aufeinanderfolgende Stichproben steigen, geht der physisches RAM zur Neige und der Kernel beginnt zu auszulagern (swappen). Dies ist ein klassisches Memory-Leak-Verhalten.

I/O-SĂ€ttigung feststellen

Wenn wa (CPU-Wait) und bo (Blocks Out) in die Höhe schießen, wĂ€hrend r auf niedrigen Werten verbleibt, ist die CPU untĂ€tig, wartet jedoch auf den Storage. Schnellerer Speicher (z.B. SDD statt Festplatte) oder das Tuning der I/O-Scheduler-Parameter sollten in Betracht gezogen werden.

CPU-Überbuchung (over-commit) erkennen

Ein anhaltendes r, das doppelt so hoch wie die Anzahl der logischen Kerne ist, in Kombination mit niedrigem wa und viel free bedeutet, dass die CPU der Engpass ist, nicht Arbeitsspeicher oder I/O. top oder htop helfen dabei, Prozesse zu lokalisieren die fĂŒr die hohe Last sorgen. So kann man die Arbeitslasten entsprechend verlagern oder anderweitig skalieren.

Fazit

Die Beherrschung von free und vmstat bietet einen Einblick in Speicherverwendung, Swap-AktivitĂ€t, I/O-Latenz und CPU-Last. FĂŒr alltĂ€gliches Debugging empfiehlt sich: ZunĂ€chst mit free prĂŒfen, ob dem System wirklich der Speicher ausgeht, dann vmstat verwenden, um den Grund zu enthĂŒllen, seien es Speicherlecks, Storage-EngpĂ€sse oder CPU-SĂ€ttigung.

Der nĂ€chste Teil unserer Serie “System-Einblicke mit Kommandozeilen-Tools” folgt bald – frohes Linux-Troubleshooting!