Bei der Diagnose von Problemen mit wenig Arbeitsspeicher auf meinem Desktop-Computer (Details bei U & L ) habe ich festgestellt, dass mein nicht im Cache enthaltener "dynamischer Kernelspeicher" groß ist :
# smem -twk
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 1.1G 369.3M 801.7M
userspace memory 2.0G 133.3M 1.9G
free memory 734.1M 734.1M 0
----------------------------------------------------------
3.9G 1.2G 2.7G
Auf zwei anderen Systemen habe ich überprüft, dass es 150 MB (ebenfalls ein Desktop, aber mit 8 GB oder RAM) und 29 MB waren. Nirgendwo in der Nähe der 20% meiner Desktop-Maschine.
Wie kann ich herausfinden, was es so groß macht?
Übrigens: Ich habe bereits smem
Quellen überprüft , im Grunde genommen (memtotal - userspace - free - cache).
/proc/meminfo
::
# cat / proc / meminfo MemTotal: 4051956 kB MemFree: 508276 kB Puffer: 35232 kB Zwischengespeichert: 651052 kB SwapCached: 121380 kB Aktiv: 1358008 kB Inaktiv: 1351596 kB Aktiv (anon): 1184616 kB Inaktiv (anon): 886904 kB Aktiv (Datei): 173392 kB Inaktiv (Datei): 464692 kB Nicht vorhersehbar: 8616 kB Gesperrt: 8616 kB SwapTotal: 4051952 kB SwapFree: 3815780 kB Schmutzig: 348 kB Rückschreibung: 0 kB AnonPages: 1971164 kB Kartiert: 140108 kB Shmem: 44656 kB Platte: 176564 kB SReclaimable: 62080 kB SUnreclaim: 114484 kB KernelStack: 3352 kB Seitentabellen: 43012 kB NFS_Unstable: 0 kB Sprungkraft: 0 kB WritebackTmp: 0 kB CommitLimit: 6077928 kB Committed_AS: 3681164 kB VmallocTotal: 34359738367 kB VmallocUsed: 139780 kB VmallocChunk: 34359570976 kB HardwareCorrupted: 0 kB AnonHugePages: 448512 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Riesenseitengröße: 2048 kB DirectMap4k: 2536128 kB DirectMap2M: 1656832 kB
linux
memory
memory-leaks
Hubert Kario
quelle
quelle
smem
vielleicht nicht vertrauen , sehen Sie diese Frage: unix.stackexchange.com/questions/59450/swap-usage-too-high Wenn Sie sich die Ausgabe von meminfo ansehen, heißt es, dass Shmem (Shared Memory) ungefähr 700 MB groß ist. Wenn Sie diese Meminfo an smem weitergeben, wird gemeldet, dass der Kernel-Cache-Speicher etwas mehr als 700 MB beträgt. Smem hat das Shmem im Kernel-Speicher gezählt, während dies IMHO-Speicherplatz ist!Antworten:
Wenn Sie einen anderen Beitrag sehen, verwenden Sie vermutlich zram. Das wird hier meine Annahme sein.
Ich habe die Erfahrung gemacht, zram zu installieren und viel Speicher zu verbrauchen, und ich habe die gleiche Ausgabe
smem
wie Sie.smem
Berücksichtigt nicht diezram
Zählung , sondern verwendet nur die/proc/meminfo
Berechnung des Werts. Wenn Sie den Code suchen und verstehen, werden Sie feststellen, dass die Zram-RAM-Belegung am Ende in der Nicht-Cache- Spalte des dynamischen Kernel-Speichers gezählt wird Linie.Weitere Untersuchungen
Nachdem ich das Gefühl hatte, dass Zram hinter diesem Verhalten steckt, habe ich eine VM mit ähnlichen Spezifikationen wie Ihr Computer eingerichtet: 4 GB RAM und 2 GB Zram-Swap, keine Swap-Datei.
Ich habe die VM mit schweren Anwendungen geladen und den folgenden Status erhalten:
Wie Sie sehen können
free
, werden 858 MB Cache-Speichersmem
gemeldet, und dies scheint auch im dynamischen Speicher des zwischengespeicherten Kernels zu melden.Dann habe ich das System mit Chromium Browser weiter betont. Zu Beginn wurden nur 83 MB Swap verwendet. Aber dann, nachdem ein paar weitere Registerkarten geöffnet wurden, schaltete der Wechsel schnell auf fast das Maximum um und ich erlebte OOM!
zram
hat wirklich eine gefährliche Seite, wo falsch konfiguriert (zu große Größen) es Sie schnell zurückschlagen kann wie ein Trebuchet-ähnlicher Mechanismus.Zu dieser Zeit hatte ich folgende Ausgänge:
Sehen Sie, wie der dynamische Kernelspeicher (Spalten-Cache und Nicht-Cache) invertiert aussieht? Dies liegt daran, dass der Kernel im ersten Fall einen "zwischengespeicherten" Speicher hatte, wie er von gemeldet wurde,
free
aber dann einen Swap-Speicher hatte,zram
dersmem
nicht berechnet werden kann (smem-Quellcode überprüfen, zram-Belegung wird nicht in / proc / meminfo gemeldet , dies wird nicht berechnet,smem
wodurch einfache "Gesamtkernel-Mem" - "von meminfo gemeldeter Speichertyp, von dem ich weiß, dass sie Cache sind" ausgeführt werden. Was es nicht weiß, ist, dass es in dem berechneten Gesamtkernel-Mem die Größe des hinzugefügt hat Swap, der im RAM ist!)In diesem Zustand habe ich einen Festplattentausch aktiviert, den Zram-Swap deaktiviert und die Zram-Geräte zurückgesetzt :
echo 1 > /sys/block/zram0/reset
.Danach schmolz der Nicht-Cache-Kernel-Speicher im Sommer wie Schnee und kehrte zum "normalen" Wert zurück.
Fazit
smem
weißzram
(noch) nicht, vielleicht weil es noch inszeniert wird und daher nicht Teil/proc/meminfo
davon globale Parameter (wie (in) aktive Seitengröße, Gesamtspeicher) und dann nur einige wenige spezifische Parameter meldet.smem
Einige dieser spezifischen Parameter wurden als "Cache" identifiziert, zusammengefasst und mit dem Gesamtspeicher verglichen. Aus diesem Grund wird derzram
verwendete Speicher in der Nicht-Cache- Spalte gezählt.Hinweis: Im modernen Kernel wird übrigens
meminfo
auch der verbrauchte gemeinsam genutzte Speicher gemeldet.smem
berücksichtigt das noch nicht, so dass auch ohnezram
die Ausgabe vonsmem
sorgfältig zu prüfen ist, insb. Wenn Sie eine Anwendung verwenden, die den gemeinsam genutzten Speicher stark nutzt.Verwendete Referenzen:
quelle
zram
hilft nicht (ja, es reduziert den Kernel-Speicher, aber nur um ca. 100 MB). Die 5 größten Prozesse dauerten ca. 300 (X) bis 50 MB RSS, insgesamt weniger als 600 MB.slabtop
falls verfügbar, und prüfen, ob eine Kernelaktivität für die Speichernutzung verantwortlich sein könnte? Ich werde später heute versuchen, weiter zu untersuchen, was genau das Problem ist und ob es überhaupt Sinn macht!slabtop
meldet insgesamt etwa 200-300 MB Speicher. Während ich die Anwendungen ausführe, kann ich smem dazu bringen, ähnliche Zahlen auf meinem anderen Computer zu melden, indem ich Anwendungen ausführe. Durch Deaktivieren der Anwendungen wird der dynamische Kernelspeicher auf dem anderen Computer verringert. Auf dem problematischen Computer wächst der dynamische Speicher des Nicht-Cache-Kernels so lange weiter, bis das System unbrauchbar wird (etwa eine Woche Betriebszeit)smem
könnte der Nicht-Cache-Kernel-Speicher falsch berechnet werden, es könnte sich nicht um den gesamten Kernel handeln, es könnte sich nicht um den gesamten Nicht-Cache handeln. Vertrauenps
,/proc/<pid>/
und/proc/meminfo
.Sieht für mich nicht schlecht aus, viele leicht wiedergewinnbare Erinnerungen. Was genau funktioniert nicht (nicht nur "Oh, Horror, sieh dir die Zahlen an, die <zufälliges Programm> gibt!")? Programme stürzen ab (OOM, nicht genügend Speicher, Handler tritt ein)? Programme starten nicht? System fühlt sich träge an? Unaufhörliche Festplattenaktivität? Irgendwelche Hinweise in den Protokollen?
Linux wird den gesamten verfügbaren Speicher aufzufüllen, ist es billiger , nur Sachen herum zu halten als es aktiv zu löschen, und es könnte es später erneut verwendet werden. Eine ruhende Maschine (oder kurz nach dem Booten) gibt ganz andere Zahlen als eine aktiv benutzte.
quelle