Hoher Speicherverbrauch, der nicht auf einen Dienst oder eine Anwendung zurückgeführt werden kann

Hoher Speicherverbrauch, der nicht auf einen Dienst oder eine Anwendung zurückgeführt werden kann

Unter Ubuntu 22.04 habe ich ein seltsames Problem mit dem Speicher. Ich kann nicht herausfinden, warum mein Speicherverbrauch so hoch ist. Wenn ich meinen Laptop hochfahre, ist der Speicherverbrauch wie erwartet, aber mit der Zeit scheint etwas meinen Speicher aufzufressen, aber das System scheint nicht zu wissen, wofür er verwendet wird.

Nachdem der Laptop einige Tage gelaufen ist und über Nacht im Ruhezustand war, free -mmeldet er Folgendes:

               total        used        free      shared  buff/cache   available
Mem:           14812        7329        2683        1810        4799        5348
Swap:           2047         416        1631

Alle Bewerbungen sind geschlossen, und lautdieses WerkzeugDer von allen Anwendungen insgesamt genutzte Speicher beträgt 1,7 GiB. Was also nutzt die letzten ~5,5 GiB (7,2-1,7)?

Übersehe ich etwas?

Bildbeschreibung hier eingeben

Antwort1

Mit dieser Antwort soll versucht werden, mögliche Ursachen für eine „nicht berücksichtigte“ Speichernutzung zu beheben, die möglicherweise über die Erfahrungen des OP hinausgehen.

Hintergrund

Unter Linux kann die Speichernutzung im Wesentlichen auf zwei Elemente zurückgeführt werden:

  • Verwendung durch Prozesse/Threads
  • Verwendung durch ein Dateisystem

Im Fall dieser Frage kann der OP nicht den gesamten von Prozessen/Threads verwendeten Speicher berücksichtigen. Daher ist es sehr wahrscheinlich, dass der verbleibende Speicher vom Kernel für Dateisystemoperationen verwendet wird.

Mögliche Ursachen

Mir sind derzeit drei Hauptgründe für eine übermäßige Nutzung des Dateisystemspeichers bekannt:

  1. ZFS ARC-Cache (oder ähnlicher Dateisystem-Cache, der als „normale“ Speichernutzung registriert wird)
  2. Ramdisks ( tmpfsund ähnliche Dateisysteme)
  3. Native Dateisystemkomprimierung, kombiniert mit übermäßigem Festplatten-E/A (so dass die Komprimierung/Neukomprimierung mit einem konstanten Speicherverbrauch einhergeht)

Zur Fehlerbehebung in diesen drei Szenarien würde ich Folgendes empfehlen:

1. ZFS ARC-Cache

Führen Sie diesen Befehl aus, um detaillierte Informationen zum ZFS ARC-Cache zu erhalten:

arcstat -a 

Die gemeldete Statistik sizewird als normal genutzter Speicher angezeigt.

Aus Deinem Beitrag geht eindeutig hervor, dass hier 0,5 GB verbraucht werden.

2. Ramdisks

Führen Sie diesen Befehl aus, um Informationen zu allen aktuellen tmpfsDateisystem-Ramdisks zu erhalten:

df -hl -t"tmpfs"

Jeder gemeldete Betrag usedwird als normal genutzter Speicher angezeigt.

Ubuntu (und viele andere Linux-Varianten) haben eine Standard-Ramdisk unter /dev/shm. Anwendungen können diesen Speicherplatz nutzen, was Sie ganz einfach mit folgendem Befehl überprüfen können:

ls -ahl /dev/shm

Darüber hinaus wird die Nutzung auch in der Ausgabe tmpfsangezeigt . Aus Ihrem Beitrag geht also hervor, dass hier 1,8 GB verwendet werden.sharedfree

3. FS-Komprimierung

Überprüfen Sie die Festplatten-E/A mit diesem Befehl: ( iostatist Teil des sysstatPakets)

iostat

Kombinieren Sie dies mit dem Wissen über die aktivierte Dateisystemkomprimierung für die entsprechenden Festplatten. Führen Sie für ZFS diesen Befehl aus, um die Komprimierungseigenschaften für alle Zpools und Datasets abzurufen:

zfs get compression

Wenn Sie über eine hohe Festplatten-E/A in Kombination mit aktivierter nativer Komprimierung verfügen, kann dies dazu führen, dass übermäßiger Speicher als normal genutzter Speicher gemeldet wird.

Antwort2

Verwenden Sie Komprimierung auf Ihrem Dateisystem oder ein Copy-on-Write-Dateisystem wie BTRFS oder ZFS?

Möglicherweise liegt die übermäßige Speichernutzung daran, dass der Kernel versucht, Dateien in Echtzeit (erneut) zu komprimieren oder bei jedem Schreibvorgang eine Kopie/Versionierung durchzuführen, wenn sich große Dateien häufig ändern.

Der Speicherdruck wird insbesondere dann spürbar, wenn Sie über große Dateien wie Images für virtuelle Maschinen verfügen, bei denen sich die Dateien häufig ändern und deren Größe im Gigabyte- statt im Megabyte-Bereich liegt.

Sie können die Komprimierung auf Dateisystem-/Subvolume-/Volume-Ebene oder auf Ebene einzelner Dateien deaktivieren und/oder COW (Copy on Write) deaktivieren.

BTRFS:
Es unterstützt das Entfernen der Komprimierung für bestimmte Dateien mit dem btrfs-Befehl:

 property set <file> compression none

So entfernen Sie COW (Copy on Write) für einen bestimmten Ordner:

chattr -R +C /directory/of/your/vm_images/

ZFS:
Ich glaube nicht, dass Sie die Komprimierung einzelner Dateien entfernen können. Das Deaktivieren der Komprimierung auf einem Datenträger wirkt sich nur auf zukünftige Schreibvorgänge aus. Sie müssen also jede Datei einzeln kopieren, damit die Komprimierung deaktiviert wird.

zfs set compression=off name_of_zfs_vol

verwandte Informationen