Articles

Wie man die Speichernutzung vom Linux-Terminal aus überprüft

  • Dave McKay

    @TheGurkha

  • März 11, 2020, 8:00 Uhr EDT
Fatmawati Achmad Zaenuri/

Es gibt viele Möglichkeiten, wie Sie die Speichernutzung in Ihrem Linux-System auf die Schliche kommen können. In dieser Zusammenfassung werden wir die am häufigsten verwendeten Kommandozeilenmethoden behandeln: freevmstat, und top. Wir werden uns auch das direkte Lesen von /proc/meminfo ansehen.

Wie Linux den Arbeitsspeicher nutzt

RAM ist eine endliche Ressource, von der alle Prozesse, wie Anwendungen und Daemons, ein Stück haben wollen. Es ist nur so viel davon verfügbar. Der Kernel schiedet die Speicherstreitigkeiten und verteilt den rationierten Speicher an alle hungrigen Prozesse. Es ist ein bisschen wie eine Vogelmutter, die mehr offene Schnäbel hat, als sie füttern kann.

Ungenutzter RAM ist verschwendeter RAM. Linux verwendet jedes freie RAM für Dinge wie Dateipuffer, um den Computer mit optimaler Leistung laufen zu lassen. Es kann leicht der Eindruck entstehen, dass der RAM Ihres Systems von einem durchgebrannten Prozess oder einem Speicherleck verbraucht wurde, aber das ist selten der Fall.

Werbung

Es ist normalerweise nur der Kernel, der hartnäckig seine Arbeit im Hintergrund erledigt. Wenn es andere Anforderungen für den Arbeitsspeicher gibt, den der Kernel für seine eigenen Geräte geplündert hat, gibt er den Speicher sofort wieder frei, so dass kein Schaden entsteht.

Wenn der Kernel entscheidet, dass es effizienter ist, Swap Space zu verwenden, bringt er auch das ins Spiel. Es gibt eine Menge Verwirrung über den swappiness-Wert in Linux und darüber, wann der Kernel anfängt, Swap zu benutzen. Es ist nicht wahr, dass der swappiness-Wert einen Schwellenwert für die RAM-Nutzung festlegt, der die Aktivierung von Swap auslöst.

Aber schauen wir uns jetzt die verschiedenen Techniken an, die Sie im Terminal-Fenster verwenden können, um die RAM-Nutzung auf Ihrem Linux-Computer zu sehen.

Der free-Befehl

Der free-Befehl gibt Ihnen eine Tabelle mit dem gesamten, verwendeten, freien, gemeinsam genutzten, Puffer/Cache- und verfügbaren RAM auf Ihrem Computer. Er zeigt Ihnen auch die Gesamtmenge des konfigurierten Swap-Speicherplatzes und wie viel davon benutzt und verfügbar ist.

Anzeige

In unserem Beispiel verwenden wir die Option -m (mebibytes). Sie könnten aber auch -b (bytes), -k (kibibytes) oder -g (gibibytes) verwenden.

Wir geben den folgenden Befehl ein:

free -m

Dies ist die Ausgabe, die wir erhalten:

 total used free shared buff/cache available Mem: 1987 901 95 80 990 811 Swap: 1521 651 869

Die Mem Spalten enthalten die folgenden Informationen:

  • Gesamt: Die Gesamtmenge des physischen RAM auf diesem Computer.
  • Benutzt: Die Summe aus Free+Buffers+Cache, die von der Gesamtmenge abgezogen wird.
  • Free: Die Menge des nicht verwendeten Speichers.
  • Shared: Menge des von den tmpfs Dateisystemen verwendeten Speichers.
  • Puffer/Cache: Menge des für Puffer und Cache verwendeten Speichers. Dieser kann bei Bedarf schnell vom Kernel freigegeben werden.
  • Verfügbar: Dies ist eine Schätzung des Speichers, der verfügbar ist, um Speicheranforderungen von Anwendungen und anderer Betriebssoftware auf Ihrem Computer zu bedienen.

Die Swap Spalten enthalten die folgenden Informationen:

  • Gesamt: Die Größe der Swap-Partition oder -Datei.
  • Benutzt: Die Menge des genutzten Swap-Speichers.
  • Frei: Die Menge des verbleibenden (unbenutzten) Swap-Speichers.

Sie können auch den folgenden raffinierten Trick verwenden, den wir von einem unserer Leser erhalten haben, um den Prozentsatz des genutzten Swap-Speichers zu sehen:

free -m | grep Swap | awk '{print ($3/$2)*100}'

Verbunden: Wie man den free-Befehl unter Linux verwendet

Der vmstat-Befehl

Es ist unmöglich, ein gutes Verständnis für die Art und Weise zu haben, wie der RAM in Ihrem Linux-Rechner genutzt wird, ohne den Zustand Ihres Swap Space zu kennen. RAM und Swap Space arbeiten eng zusammen.

Mit dem Befehl vmstat können Sie einen tieferen Einblick in die Nutzung Ihres Swap Space (oder virtuellen Speichers) gewinnen. Er gibt Ihnen einen Bericht über eine Vielzahl von Swap-bezogenen Statistiken, basierend auf den Durchschnittswerten seit dem letzten Neustart.

Geben Sie Folgendes ein:

vmstat

Das ist die Ausgabe ohne den Umbruch:

Anzeige

Es gibt eine Menge Datenpunkte in diesem Bericht, also werden wir sie aufschlüsseln:

  • Proc:
    • r: Die Anzahl der „lauffähigen“ Prozesse. Sie laufen entweder oder warten auf ihre nächste zeitlich begrenzte Menge an CPU-Zyklen.
    • b: Die Anzahl der Prozesse im ununterbrochenen Ruhezustand. Diese schlafen nicht, sondern führen einen blockierenden Systemaufruf aus. Sie können nicht unterbrochen werden, bis sie ihre aktuelle Aktion abgeschlossen haben. Typischerweise ist dieser Prozess ein Gerätetreiber, der darauf wartet, dass eine Ressource frei wird. Alle anstehenden Interrupts für diesen Prozess werden bearbeitet, wenn der Prozess seine übliche Aktivität wieder aufnimmt.
  • Speicher:
    • swpd: Die Menge des verwendeten virtuellen Speichers, d. h. wie viel Speicher ausgelagert wurde.
    • free: Die Menge an freiem (unbenutztem) Speicher.
    • buff: Die Menge des als Puffer verwendeten Speichers.
    • cache: Die Menge des als Cache verwendeten Speichers.
  • Swap:
    • si: Die Menge an virtuellem Speicher, die aus dem Swap-Bereich ausgelagert wurde.
    • so: Die Menge des in den Swap Space ausgelagerten virtuellen Speichers.
  • IO:
    • bi: Blocks in. Die Anzahl der Datenblöcke, die verwendet wurden, um den virtuellen Speicher zurück in den RAM zu swappen.
    • bo: Blocks out. Die Anzahl der Datenblöcke, die verwendet werden, um virtuellen Speicher aus dem RAM in den Swap Space auszulagern.
  • System:
    • in: Die Anzahl der Interrupts pro Sekunde, einschließlich des Taktes.
    • cs: Die Anzahl der Kontextwechsel pro Sekunde. Ein Kontextwechsel ist, wenn der Kernel von der System- zur Benutzermodusverarbeitung wechselt.
  • CPU: Diese Werte sind alle Prozentsätze der gesamten CPU-Zeit:
    • us: Zeit, die mit der Ausführung von Benutzer- (Nicht-Kernel-) Code verbracht wird.
    • sy: Zeit, die mit der Ausführung von Kernel-Code verbracht wird.
    • id: Im Leerlauf verbrachte Zeit.
    • wa: Zeit, die mit Warten auf Ein- oder Ausgabe verbracht wird.
    • st: Die Zeit, die eine virtuelle Maschine warten muss, bis der Hypervisor die Bedienung anderer virtueller Maschinen beendet hat, bevor er sich wieder um diese virtuelle Maschine kümmern kann.

Verbunden: So verwenden Sie den Befehl vmstat unter Linux

Der obere Befehl

Der top-Befehl zeigt einen Bildschirm voller Informationen an. Die Werte werden alle paar Sekunden aktualisiert.

Um ihn zu verwenden, geben wir Folgendes ein:

top

Die Taste „e“ wurde gedrückt. Dadurch wurde die Anzeige auf Megabytes umgestellt, die visuell leichter zu analysieren sind als lange Zeichenketten, die Bytes darstellen. Es gibt fünf Zeilen mit Informationen am oberen Rand des Bildschirms und einen unteren Bereich mit Spalten mit Daten.

Hier sind die Informationen, die Sie in jeder Zeile finden:

  • Zeile eins: Die Uhrzeit, wie lange der Rechner schon läuft, wie viele Personen angemeldet sind und wie hoch die durchschnittliche Auslastung in den letzten ein, fünf und 15 Minuten war.
  • Zeile zwei: Die Anzahl der Tasks und deren Status: laufend, angehalten, schlafend oder Zombie.
  • Zeile drei: CPU-Informationen (siehe die Aufschlüsselung der Felder unten).
  • Zeile vier: Die Gesamtmenge des physischen Speichers und wie viel davon frei, verwendet, gepuffert oder gecached ist.
  • Zeile fünf: Gesamtmenge des Swap-Speichers und wie viel davon frei, verwendet und verfügbar ist (unter Berücksichtigung des Speichers, der voraussichtlich aus den Caches wiederhergestellt werden kann).

Die CPU-Felder in Zeile drei sind wie folgt:

  • us: Zeit, die die CPU mit der Ausführung von Prozessen für Benutzer im Userspace verbringt.
  • sy: Zeit, die die CPU mit der Ausführung von Prozessen für das System im „Kernel Space“ verbracht hat.
  • ni: Zeit, die die CPU mit der Ausführung von Prozessen mit einem manuell eingestellten nice-Wert verbracht hat.
  • id: CPU-Leerlaufzeit.
  • wa: Zeit, die die CPU damit verbringt, auf die Fertigstellung von E/A zu warten.
  • hi: Zeit, die die CPU mit der Bedienung von Hardware-Interrupts verbracht hat.
  • si: Zeit, die die CPU mit der Bedienung von Software-Interrupts verbracht hat.
  • st (steal time): Zeit, die die CPU durch die Ausführung virtueller Maschinen verloren hat.

Um alle Spalten zu sehen, müssen Sie eventuell die Pfeiltasten nach links oder rechts drücken. Die Werte in jeder Spalte werden im Folgenden beschrieben:

  • PID: Prozess-ID.
  • USER: Name des Eigentümers des Prozesses.
  • PR: Prozesspriorität.
  • NI: Der Nice-Wert des Prozesses.
  • VIRT: Vom Prozess verwendeter virtueller Speicher.
  • RES: Residenter Speicher, der von dem Prozess verwendet wird.
  • SHR: Gemeinsamer Speicher, der von dem Prozess verwendet wird.
  • S: Status des Prozesses. (Siehe die Liste der Werte, die dieses Feld annehmen kann, unten).
  • %CPU: Der Anteil der CPU-Zeit, den der Prozess seit der letzten Aktualisierung verwendet hat.
  • %MEM: Der Anteil des verwendeten physischen Speichers.
  • TIME+: Die gesamte von der Aufgabe verwendete CPU-Zeit in 100stel Sekunden.
  • COMMAND: Der Befehlsname oder die Befehlszeile (Name + Optionen). (Diese Spalte befindet sich in der obigen Abbildung rechts außerhalb des Bildschirms.)

Anzeige

Der in der Spalte S angezeigte Status kann einer der folgenden sein:

  • D: Ununterbrochener Schlaf.
  • R: Läuft.
  • S: Schläft.
  • T: Verfolgt (angehalten).
  • Z: Zombie.

Drücken Sie Q, um top zu beenden.

Lesen von /proc/meminfo

Viele (und sehr wahrscheinlich die meisten) der Tools in Linux, die Speicherstatistiken ausgeben, beziehen ihre Informationen aus dem Pseudo-Dateisystem /proc/meminfo. Wir können die Befehle cat oder less verwenden, um dasselbe zu tun.

Wir geben Folgendes ein:

less /proc/meminfo

Abhängig vom laufenden Kernel und der Architektur der CPU sehen Sie möglicherweise unterschiedliche Felder. Wir haben die folgenden Ergebnisse auf unserer virtuellen Maschine erhalten:

MemTotal: 2035260 kB MemFree: 919064 kB MemAvailable: 1300932 kB Buffers: 33528 kB Cached: 457604 kB SwapCached: 29732 kB Active: 313360 kB Inactive: 603276 kB Active(anon): 74648 kB Inactive(anon): 355004 kB Active(file): 238712 kB Inactive(file): 248272 kB Unevictable: 16 kB Mlocked: 16 kB SwapTotal: 1557568 kB SwapFree: 873024 kB Dirty: 80 kB Writeback: 0 kB AnonPages: 414100 kB Mapped: 97436 kB Shmem: 4148 kB KReclaimable: 52932 kB Slab: 94216 kB SReclaimable: 52932 kB SUnreclaim: 41284 kB KernelStack: 9280 kB PageTables: 45264 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2575196 kB Committed_AS: 5072192 kB VmallocTotal: 34359738367 kB VmallocUsed: 35712 kB VmallocChunk: 0 kB Percpu: 720 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 180160 kB DirectMap2M: 1916928 kB

Alle Größen sind in Kibibytes angegeben, wenn nicht anders angegeben. Hier ist, was sie alle bedeuten, zusammen mit einigen anderen, die Sie abhängig von der Konfiguration und Hardware Ihres Computers sehen können:

  • MemTotal: Der gesamte nutzbare RAM (abgesehen von ein paar reservierten Bits und dem Kernel-Binärcode).
  • MemFree: Die Summe von LowFreeHighFree. Die Menge des aktuell verfügbaren RAMs.
  • MemAvailable: Geschätzter Speicher, der zum Starten neuer Anwendungen verfügbar ist, ohne Swapping.
  • Puffer: Temporärer Speicher für rohe Festplattenblöcke. Dies reduziert die Festplattenein- und -ausgabe. Außerdem wird der Zugriff auf nachfolgende Anfragen nach denselben Daten beschleunigt, da sie sich bereits im Speicher befinden.
  • Cached: Zwischengespeicherte Seiten, die aus Dateien auf der Festplatte gelesen werden (ohne SwapCached).
  • SwapCached: Speicher, der ausgelagert und wieder eingelagert wurde, und eine Kopie verbleibt im Swap-Bereich.
  • Aktiv: Speicher, der kürzlich verwendet wurde. Er wird nur bei absoluter Notwendigkeit wieder angefordert.
  • Inaktiv: Speicher, der verwendet wurde, aber nicht der zuletzt verwendete. Er ist ein wahrscheinlicher Kandidat für die Rückforderung.
  • Aktiv(anon): Speicher, der Dateien zugewiesen wurde, die in einem tmpfs Pseudo-Dateisystem erstellt wurden. Anonyme Dateien befinden sich nicht auf der Festplatte.
  • Inactive(anon): Menge des anonymen, tmpfs und shmem Speichers, der ein Kandidat für die Verdrängung (Speicherrückgewinnung) ist.
  • Aktiv(Datei): Menge des Dateicache-Speichers, der verwendet wird oder seit dem letzten Speicherrückgewinnungszyklus verwendet wurde.
  • Inaktiv(Datei): Menge des Dateicache-Speichers, der von einer Festplatte gelesen wurde und ein Kandidat für die Rückgewinnung ist.
  • Unverfügbar: Speichermenge, die ausgelagert werden sollte, aber nicht ausgelagert werden kann, weil sie von User-Space-Prozessen im Speicher gesperrt ist.
  • Mlocked: Gesamtmenge des Speichers, die nicht ausgelagert werden kann, weil sie von User-Space-Prozessen gesperrt ist.
  • HighTotal: Gesamtmenge von HighMem, die von User-Space-Programmen und Page-Cache verwendet wird. Der Kernel kann auf diese Speicherzone zugreifen, aber der Zugriff ist langsamer als bei LowMem.
  • HighFree: Menge an freiem HighMem.
  • LowTotal: Menge an LowMem, die für die gleichen Verwendungen wie HighMem zur Verfügung steht, aber auch vom Kernel für eigene Zwecke genutzt werden kann.
  • LowFree: Menge an freiem LowMem.
  • MmapCopy: Menge des Speichers, die auf Dateidaten abgebildet wurde.
  • SwapTotal: Gesamtmenge des verfügbaren Swap-Speichers.
  • SwapFree: Menge an Swap Space, die derzeit nicht genutzt wird.
  • Dirty: Menge an Speicher, die darauf wartet, auf die Festplatte zurückgeschrieben zu werden.
  • Writeback: Speicher, der aktiv auf die Festplatte zurückgeschrieben wird.
  • AnonPages: Nicht dateigebundene Seiten, die in User-Space-Seitentabellen abgebildet werden.
  • Mapped: Dateien (wie Bibliotheken), die in den Speicher eingeblendet werden.
  • Shmem: Menge an Speicher, die in tmpfs Pseudo-Dateisystemen verbraucht wird.
  • KReclaimable: Kernel-Speicherallokationen, die der Kernel versucht, zurückzufordern, wenn der Bedarf an Speicher groß genug ist.
  • Slab: Kernelinterner Datenstruktur-Cache.
  • SReclaimable: Menge des Slab Speichers, der zurückverlangt werden kann, wie z. B. Caches.
  • SUnreclaim: Menge des Slab Speichers, der nicht zurückverlangt werden kann.
  • KernelStack: Menge des für Kernel-Stacks reservierten Speichers.
  • PageTables: Menge des Speichers, die der untersten Ebene der Seitentabellen zugeordnet ist.
  • Quicklists: Da die Zuweisung und Löschung von Seitentabellen ein sehr häufiger Vorgang ist, ist es wichtig, dass er so schnell wie möglich erfolgt. Daher werden die für Seitentabellen verwendeten Seiten in einer Reihe von verschiedenen Listen, den so genannten „Quicklists“, zwischengespeichert.
  • NFS_Unstable: Network File System (NFS)-Seiten, die der Server empfangen, aber noch nicht in den nichtflüchtigen Speicher geschrieben hat.
  • Bounce: Speicher, der für Bounce-Puffer von Blockgeräten verwendet wird. Ein Bounce-Puffer wird im Speicher so niedrig positioniert, dass ein Gerät direkt darauf zugreifen kann. Die Daten werden dann in die gewünschte Benutzerseite in HighMem kopiert.
  • WritebackTmp: Speicher, der vom Dateisystem im Userspace (FUSE) für temporäre Write-Back-Puffer verwendet wird.
  • CommitLimit: Die Gesamtmenge an Speicher, die derzeit im System zugewiesen werden kann.
  • Committed_AS: Die geschätzte Menge an Speicher, um alle aktuellen Anforderungen zu erfüllen. Wenn ein Programm etwas Arbeitsspeicher anfordert, wird die Anforderung aufgezeichnet, aber der Arbeitsspeicher wird erst zugewiesen, wenn das Programm beginnt, ihn zu verwenden. Er wird auch nur nach Bedarf zugewiesen, bis zu der maximalen Menge, die das Programm reserviert hat. Es kann mehr Speicher „zugewiesen“ werden, als tatsächlich geliefert werden kann. Wenn alle Programme versuchen, ihre RAM-Chips auf einmal einzulösen, kann das Speicherkasino pleite gehen (und muss dann mit der Hand in der Tasche zu den Swap-Space-Finanziers gehen).
  • VmallocTotal: Gesamtgröße des vmalloc-Speicherbereichs.
  • VmallocUsed: Größe des verwendeten vmalloc-Bereichs. Seit Linux 4.4 wird dieses Feld nicht mehr berechnet, sondern ist fest codiert.
  • VmallocChunk: Größter zusammenhängender Block des freien vmalloc-Bereichs.
  • HardwareCorrupted: Speichermenge, die als Problem mit physischer Speicherkorruption gekennzeichnet ist. Er wird nicht allokiert.
  • LazyFree: Menge des Speichers im MADV_FREE Zustand. Wenn eine Anwendung das MADV_FREE-Flag für eine Reihe von Seiten setzt, bedeutet dies, dass sie diese nicht mehr benötigt und sie nun Kandidaten für die Rückgewinnung sind. Die tatsächliche Reklamation kann verzögert werden, bis genügend Speicherbedarf besteht. Wenn die Anwendung beginnt, auf Seiten zu schreiben, kann die Rückforderung abgebrochen werden.
  • AnonHugePages: Nicht dateigebundene riesige Seiten, die in User-Space-Seitentabellen abgebildet werden. Nicht dateigebundene Seiten stammen nicht aus einer Festplattendatei.
  • ShmemHugePages: Von Shared-Memory- (shmem) und Pseudo-Dateisystemen (tmpfs) genutzte Speichermenge, die mit riesigen Seiten belegt ist.
  • ShmemPmdMapped: Menge des gemeinsamen Speichers, der mit riesigen Seiten in den User-Space gemappt wird.
  • CmaTotal: Menge der CMA-Seiten (Contiguous Memory Allocator). Diese werden von Geräten verwendet, die nur mit zusammenhängenden Speicherbereichen kommunizieren können.
  • CmaFree: Anzahl der freien CMA-Seiten (Contiguous Memory Allocator).
  • HugePages_Total: Größe des Huge-Page-Pools.
  • HugePages_Free: Anzahl der nicht zugewiesenen Riesenseiten im Pool.
  • HugePages_Rsvd: Anzahl der reservierten riesigen Seiten. Die Zusage zur Zuweisung wurde gemacht, aber die Zuweisung ist noch nicht erfolgt.
  • HugePages_Surp: Anzahl der huge pages im Pool über dem definierten Systemwert.
  • Hugepagesize: Größe von riesigen Seiten.
  • DirectMap4k: Anzahl der Bytes des RAM, die auf 4 kB Seiten abgebildet werden.
  • DirectMap4M: Anzahl der Bytes des RAM, die auf 4 MB Seiten abgebildet werden.
  • DirectMap2M: Anzahl der Bytes des RAM, die auf 2 MB Seiten abgebildet werden.
  • DirectMap1G: Anzahl der Bytes des Arbeitsspeichers, die auf 2 GB-Seiten abgebildet sind.

Wie bei Linux üblich, gibt es mehr als einen Weg, sich einen schnellen Überblick zu verschaffen, und immer mindestens einen Weg, tiefer in die Details zu gehen.

Werbung

Sie werden wahrscheinlich freetop und vmstate regelmäßig benutzen, und halten Sie /proc/meminfo in Reserve, wenn Sie einen Deep-Dive machen müssen, um ein bestimmtes Problem zu untersuchen.

Dave McKay
Dave McKay hat zum ersten Mal Computer benutzt, als Lochstreifen noch in Mode waren, und seitdem programmiert er. Nach über 30 Jahren in der IT-Branche arbeitet er jetzt hauptberuflich als Technologie-Journalist. Während seiner Karriere arbeitete er als freiberuflicher Programmierer, Manager eines internationalen Software-Entwicklungsteams, Projektmanager für IT-Services und zuletzt als Datenschutzbeauftragter. Dave ist ein Linux-Evangelist und Open-Source-Befürworter.Read Full Bio“

Eine Antwort schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.