Was ist "Kernel Dynamic Memory", wie von smem gemeldet?

7

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 smemQuellen ü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
Hubert Kario
quelle
Sie sollten smemvielleicht 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!
Huygens

Antworten:

2

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 smemwie Sie. smemBerücksichtigt nicht die zramZählung , sondern verwendet nur die /proc/meminfoBerechnung 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:

huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area                           Used      Cache   Noncache 
firmware/hardware            130717          0     130717 
kernel image                  13951          0      13951 
kernel dynamic memory       1063520     922172     141348 
userspace memory            2534684     257136    2277548 
free memory                  451432     451432          0 
----------------------------------------------------------
                            4194304    1630740    2563564 
huygens@ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3954       3528        426          0         79        858
-/+ buffers/cache:       2589       1365
Swap:         1977          0       1977

Wie Sie sehen können free, werden 858 MB Cache-Speicher smemgemeldet, 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! zramhat 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:

huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area                           Used      Cache   Noncache 
firmware/hardware            130717          0     130717 
kernel image                  13951          0      13951 
kernel dynamic memory       1355344     124072    1231272 
userspace memory             961004      36456     924548 
free memory                 1733288    1733288          0 
----------------------------------------------------------
                            4194304    1893816    2300488 
huygens@ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3954       2256       1698          0          4        132
-/+ buffers/cache:       2118       1835
Swap:         1977       1750        227

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, freeaber dann einen Swap-Speicher hatte, zramder smemnicht berechnet werden kann (smem-Quellcode überprüfen, zram-Belegung wird nicht in / proc / meminfo gemeldet , dies wird nicht berechnet, smemwodurch 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

smemweiß zram(noch) nicht, vielleicht weil es noch inszeniert wird und daher nicht Teil /proc/meminfodavon globale Parameter (wie (in) aktive Seitengröße, Gesamtspeicher) und dann nur einige wenige spezifische Parameter meldet. smemEinige dieser spezifischen Parameter wurden als "Cache" identifiziert, zusammengefasst und mit dem Gesamtspeicher verglichen. Aus diesem Grund wird der zramverwendete Speicher in der Nicht-Cache- Spalte gezählt.

Hinweis: Im modernen Kernel wird übrigens meminfoauch der verbrauchte gemeinsam genutzte Speicher gemeldet. smemberücksichtigt das noch nicht, so dass auch ohne zramdie Ausgabe von smemsorgfältig zu prüfen ist, insb. Wenn Sie eine Anwendung verwenden, die den gemeinsam genutzten Speicher stark nutzt.

Verwendete Referenzen:

Huygens
quelle
Das Deaktivieren zramhilft 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.
Hubert Kario
Könnten Sie verwenden, slabtopfalls 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!
Huygens
Ich habe eine VM mit 4 GB RAM und nur 2 GB Swap mit zram eingerichtet. Ich habe einige schwere Anwendungen geöffnet: Firefox (viele Registerkarten mit Bildern, Facebook-Seiten usw.), LibreOffice, Gimp mit mehreren 10-Megapixel-Fotos. Die Ausgabe von smem war 1 GB Kernel (mehr oder weniger alles Cache) und 2,5 GB Userspace (mehr oder weniger alles Nicht-Cache). Es wurde kein Tausch verbraucht. Dann habe ich Chrome gestartet, ein paar Seiten geöffnet und angefangen, 83 MB auszutauschen, aber das hat für smem nicht viel geändert. Ich habe jedoch mehrere andere Tabs geöffnet und bam! Ich hatte eine ähnliche Ausgabe wie smem, siehe meine aktualisierte Antwort.
Huygens
slabtopmeldet 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)
Hubert Kario
@HubertKario Vielleicht ist zram teilweise nur der Schuldige, aber ich habe das Gefühl, dass zram die Sache nur noch schlimmer macht, wenn Ihr System zu viel von "diesem Speicher" aufhäuft, den Sie suchen :) Aber verstehen Sie mich nicht falsch Ich versuche hier zu helfen. Haben Sie versucht, Ihren Server eine Woche lang ohne zram (aber 4 GB Festplattentausch) zu betreiben? Triffst du das gleiche Problem? Früher? Später? Wie ich Ihnen bereits sagte, smemkö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. Vertrauen ps, /proc/<pid>/und /proc/meminfo.
Huygens
1

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.

vonbrand
quelle
1
Das System wird träge. Wenn ich KMail (also Akonadi, Virtuoso), Opera, Amarok, Ktorrent und einige andere Anwendungen ausführe, bleiben mir weniger als 700 MB für den Dateisystem-Cache, wenn der Kernel ein volles 1 GB für sich beansprucht, kaum optimal. Und das erst, nachdem X ungefähr eine Woche lang gelaufen ist. Durch einfaches Abmelden und Anmelden wird das System wieder auf die optimale Leistung gebracht (wobei genau dieselben Anwendungen ausgeführt werden). Protokolle führten mich zu einem Fehler im Zusammenhang mit dem Readon-Treiber. Ich teste derzeit, ob das Problem weiterhin besteht.
Hubert Kario