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 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
availableweiterhin niedriger als üblich ist - Ob die Swap-Nutzung zunimmt
- Ob
siundsoinvmstatkontinuierlich 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.




