Systemeinblicke mit Kommandozeilentools: free und vmstat

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
availablekombiniert mit steigendemswap useddeutet 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
| Bereich | Wichtige Felder | Worauf zu achten ist |
|---|---|---|
| Procs | r (Run-Queue),b (blocked) | r > CPU-Kerne = Konkurrenz um die gleichen Kerne |
| Memory | swpd, free, buff, cache | Steigendes swpd mit fallendem free = Druck |
| Swap | si, so | so ungleich Null bedeutet, dass der Kernel auslagert (swapped) |
| IO | bi, bo | Hohes bo + hohes wa deutet auf schreiblastige Arbeitslasten hin |
| System | in, cs | Plötzliche Spitzen deuten auf Interrupt-StĂŒrme hin |
| CPU | us, sy, id, wa, st | Hohes 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!