Linux / Befehl free: Speicher- und Swap-Nutzung überprüfen

free ist ein Befehl, der eine Zusammenfassung der Nutzung des physischen Speichers (RAM) und des Swap-Speichers auf einem Linux-System bietet. Wenn festgestellt werden soll, ob der Speicher unzureichend ist, ist es besser, zuerst die available-Spalte zu überprüfen, die die Menge schätzt, die verwendet werden kann, um neue Programme ohne Swapping zu starten, anstatt die free-Spalte wörtlich zu nehmen.

free -h

Linux verwendet ungenutzten RAM für Dinge wie Datei-Caching und gibt ihn bei Bedarf wieder frei. Daher sollte man nicht schließen, dass der Speicher knapp ist, nur weil der free-Wert klein und der buff/cache-Wert groß ist.

Informationen, die durch den Befehl free angezeigt werden

free liest /proc/meminfo, das vom Kernel bereitgestellt wird, um Informationen über den physischen Speicher und den Swap zu berechnen. Die Definitionen jeder Spalte und der Optionen sind im offiziellen procps-ng free Handbuch zu finden.

free -h

Eine typische Ausgabe sieht ähnlich wie folgt aus. Die Werte sind Beispiele, und das Anzeigeformat kann je nach System und Procps-ng-Version variieren.

               total        used        free      shared  buff/cache   available
Mem:            15Gi       4.2Gi       1.1Gi       320Mi       9.7Gi        10Gi
Swap:          2.0Gi       128Mi       1.9Gi

Verstehen der Bedeutung jeder Spalte

total, used, free

Spalte Bedeutung Interpretation
total Gesamter verfügbarer physischer Speicher Es entspricht möglicherweise nicht genau dem insgesamt installierten RAM. Vom Kernel und der Hardware reservierte Bereiche sind ausgeschlossen.
used Speicher, der in Gebrauch ist oder nicht sofort verfügbar ist Derzeit berechnet procps-ng ihn als total - available physischen Speicher. Die Berechnungsmethode kann je nach Version unterschiedlich gewesen sein.
free Speicher, der für keinen Zweck verwendet wird Schließt keinen als Cache verwendeten Speicher ein, der zurückgewonnen werden kann.

shared und buff/cache

shared repräsentiert hauptsächlich Speicher, der in tmpfs verwendet wird. buff/cache ist die Summe aus Kernel-Puffern, Seiten-Cache und rückgewinnbarem Slab-Speicher.

Der Cache speichert vom Datenträger gelesene Daten im RAM, um einen schnelleren erneuten Zugriff zu ermöglichen. Wenn eine Anwendung Speicher benötigt, kann der Kernel ihn zurückgewinnen, sodass ein großer Cache an sich kein Problem darstellt.

Warum available wichtig ist

available ist ein geschätzter Wert des Speichers, der verwendet werden kann, um neue Anwendungen zu starten, ohne Swap zu verwenden. Es addiert nicht einfach free + buff/cache, sondern verwendet die MemAvailable-Informationen des Kernels, die den Page Cache und einen Teil des zurückgewinnbaren Slab berücksichtigen.

Dieser Wert ist auch keine absolute Garantie für die zukünftige Speichernutzung. Wenn eine Anwendung plötzlich eine große Menge Speicher anfordert oder der Kernel Schwierigkeiten hat, Speicher zurückzugewinnen, kann sich die Situation schnell ändern.

Unterschied zwischen Mem- und Swap-Zeilen

Zeile für physischen Speicher

Die Mem-Reihe fasst die Gesamtkapazität und Nutzung des tatsächlichen RAM zusammen. Sie umfasst verschiedene Verwendungen wie Anwendungs-Speicher, Kernel, Cache und gemeinsamen Speicher.

Swap-Reihe

Swap zeigt die gesamte, genutzte und freie Kapazität des Swap-Bereichs, nicht des RAM. Man kann nicht schließen, dass derzeit ein Speichermangel besteht, nur weil die Swap-Nutzung nicht 0 ist. Dies liegt daran, dass inaktive Seiten, die zuvor ausgelagert wurden, im Swap verbleiben können, auch nachdem RAM verfügbar ist.

Umgekehrt, wenn die Swap-Nutzung weiterhin zunimmt und si und so in vmstat kontinuierlich auftreten und die Reaktionszeit sich verschlechtert, sollte auf Speicherdruck geschlossen werden.

vmstat 1

Häufig verwendete Optionen

Anzeige in für Menschen lesbaren Einheiten

free -h

-h oder --human wählt automatisch Binäreinheiten wie Ki, Mi, Gi je nach Wert aus. Wenn eine feste Einheit benötigt wird, können Sie -m, -g usw. verwenden.

free -m
free -g

Puffer und Cache separat anzeigen

free --wide

-w oder --wide trennt buff/cache in die Spalten buffers und cache. Um die genaue Ursache zu analysieren, sollten Sie auch /proc/meminfo, slabtop und andere betrachten.

Wiederholte Anzeige in regelmäßigen Abständen

free -h -s 2

-s 2 zeigt die Ergebnisse kontinuierlich in 2-Sekunden-Abständen an. Um nur eine festgelegte Anzahl von Malen zu drucken, verwenden Sie -c zusammen.

free -h -s 2 -c 5

Gesamten physischen Speicher und Swap anzeigen

free -h --total

-t oder --total fügt eine Summenzeile hinzu. Da RAM und Swap unterschiedliche Leistung und Aufgaben haben, sollte die Summe allein nicht als tatsächlich verfügbare Hochgeschwindigkeitsspeicher interpretiert werden.

Wie man einen Speichermangel feststellt

Verfügbaren Speicher zusammen mit Swap-I/O anzeigen

Es ist besser, die folgenden Signale zu beobachten, anstatt nur ein einzelnes free-Ergebnis.

  • Ob available weiterhin niedriger als üblich ist
  • Ob die Swap-Nutzung zunimmt
  • Ob si und so in vmstat kontinuierlich auftreten
  • Ob sich Service-Antwortzeit und Festplatten-I/O gleichzeitig verschlechtern
  • Ob OOM (Out of Memory) Beendigungsaufzeichnungen im Kernel-Log vorhanden sind
free -h
vmstat 1
journalctl -k -g 'oom\|Out of memory\|Killed process'

Die Suche mit journalctl kann je nach Distribution und Log-Einstellungen keine Ergebnisse liefern, und möglicherweise ist eine Berechtigung zum Lesen des Logs erforderlich.

Prozesse finden, die viel Speicher verwenden

In ps können Sie nach Speicherverbrauch sortieren, um die Top-Prozesse zu überprüfen.

ps -eo pid,user,%mem,rss,comm --sort=-rss | head

RSS gibt die aktuell im physischen Speicher geladenen Seiten an, aber gemeinsam genutzte Seiten können in mehreren Prozessen mehrfach gezählt werden. Um Container, gemeinsam genutzte Bibliotheken und Dateiabbildungen genau zu analysieren, sollten Sie cgroup-Metriken und Werkzeuge wie smem zusammen in Betracht ziehen.

Den Cache nicht bedingungslos leeren

Der Seiten-Cache wird vom Kernel verwaltet, um die Systemleistung zu verbessern. Das Erzwingen des Löschens des Caches, um die Zahlen in free zu verringern, kann die Festplattenzugriffe erhöhen und tatsächlich die Leistung reduzieren. Führen Sie dies nur durch, wenn ein klarer Zweck besteht, wie z.B. ein reproduzierbarer Leistungstest, und wenn Sie die Auswirkungen und Wiederherstellungsmethoden verstehen.

Punkte zum Nachdenken für Einheiten und Automatisierung

Binäre Einheiten und dezimale Einheiten

Die Standardanzeige von -h verwendet die KiB-, MiB-, GiB-Reihe basierend auf 1024. Die Verwendung von --si verwendet die kB-, MB-, GB-Reihe basierend auf 1000.

free -h --si

Das Mischen verschiedener Einheiten in Dokumentationen oder Überwachungen kann Diskrepanzen erzeugen, daher sollten Sie den Standard angeben.

Parsen Sie die Anzeigezeichenfolge nicht wie sie ist

Die Spalten und Berechnungsmethoden von free können je nach Version von procps-ng variieren, und menschenlesbare Einheiten sind für das Parsen nicht geeignet. In der Automatisierung sollte, wenn möglich, auf die erforderlichen Einträge aus /proc/meminfo oder auf strukturierte Metriken, die von Überwachungsagenten bereitgestellt werden, zurückgegriffen werden, und die Einheiten sowie die Version sollten festgelegt werden.

Warum freie Werte in Containern groß erscheinen

free liest /proc/meminfo. Abhängig von der Container-Laufzeitumgebung und der cgroup-Konfiguration kann diese Datei Werte anzeigen, die dem Gesamtspeicher des Hosts nahekommen, was von den tatsächlich auf den Container angewendeten Speicherlimits abweichen kann.

Bei der Bestimmung der verfügbaren Kapazität eines Containers sollten Sie unbedingt die Anfragen und Limits des Orchestrators, die cgroup-Speicherlimits und die aktuelle Nutzung sowie OOM-Ereignisse zusammen prüfen. Es ist wichtig, nicht allein anhand des free-Werts des Hosts auf den für einen Container verfügbaren Speicher zu schließen.

Häufig gestellte Fragen

Bedeutet fast 0 free, dass der Speicher unzureichend ist?

Nicht unbedingt. Wenn Linux übrig gebliebenen Speicher als Cache verwendet, kann free klein sein. Prüfen Sie available, Swap-I/O und Serviceleistung gemeinsam.

Ist der gesamte Buff/Cache-Speicher zurückgewinnbar?

Einige können bei Bedarf zurückgeholt werden, aber nicht alle können sofort zurückgeholt werden. available ist eine Schätzung, die diesen Unterschied berücksichtigt, daher ist es besser, nicht einfach alle buff/cache als free Speicher hinzuzufügen.

Bedeutet die Nutzung von Swap immer, dass der RAM nicht ausreicht?

Nein. Inaktive Seiten aus der Vergangenheit können im Swap verbleiben. Sie müssen den Trend der zunehmenden Swaps-Nutzung zusammen mit den tatsächlichen Swap-Ein-/Ausgaben und Verzögerungen prüfen.

Warum erscheint der verwendete Wert anders als bei anderen Tools?

Die Art und Weise, wie Cache- und zurückgeforderte Speichermengen klassifiziert werden, kann je nach Tool und Version variieren. Vergleichen Sie den /proc/meminfo zum gleichen Zeitpunkt, die procps-ng-Version und die Definitionen jedes Tools.

Zusammenfassung

free -h ist ein einfacher Befehl, um schnell den Status von RAM und Swap zu prüfen. Um einen Speichermangel festzustellen, sollten Sie nicht nur die free-Spalte betrachten, sondern auch available, Swap-Ein-/Ausgabe, Prozessnutzung und Serviceverzögerungen zusammen berücksichtigen.

Wenn die Last gleichzeitig hoch ist, beziehen Sie sich auf wie man die durchschnittliche Last mit dem uptime-Befehl interpretiert, um auch CPU- und I/O-Engpässe zu überprüfen.