GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie viel RAM verwendet der Kernel?

Kernel ist ein bisschen irreführend. Der Linux-Kernel besteht aus mehreren Prozessen/Threads + den Modulen (lsmod ) Um sich ein vollständiges Bild zu machen, müssten Sie also den ganzen Ball betrachten und nicht nur eine einzelne Komponente.

Meiner zeigt übrigens slabtop :

 Active / Total Size (% used)       : 173428.30K / 204497.61K (84.8%)

Die Manpage für slabtop hatte auch folgendes zu sagen:

Der Slabtop-Statistik-Header verfolgt, wie viele Bytes von Slabs verwendet werden, und ist kein Maß für den physischen Speicher. Das 'Slab'-Feld in der /proc/meminfo-Datei verfolgt Informationen über den verwendeten physischen Slab-Speicher.

Caches löschen

Das Löschen meiner Caches, wie @derobert in den Kommentaren unter Ihrer Frage vorgeschlagen hat, bewirkt Folgendes für mich:

$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$

 Active / Total Size (% used)       : 61858.78K / 90524.77K (68.3%)

Das Senden einer 3 bewirkt Folgendes:kostenloser Pagecache, Dentries und Inodes. Ich erörtere dies ausführlicher in diesem U&L Q&A mit dem Titel:Gibt es Möglichkeiten oder Tools, um den Speicher-Cache und Puffer zu dumpen?". Also wurden 110 MB meines Speicherplatzes allein durch die Pflege der Informationen zu Pagecache, Dentries und Inodes verwendet.

Zusätzliche Informationen

  • Falls Sie interessiert sind, ich habe diesen Blogbeitrag gefunden, in dem slabtop behandelt wird etwas ausführlicher. Es trägt den Titel:Linux-Befehl des Tages:slabtop.
  • Der Slab-Cache wird hier auf Wikipedia unter dem Titel:Slab-Zuordnung ausführlicher besprochen.

Wie viel RAM verwendet mein Kernel?

Dieses Bild ist für mich etwas nebliger, aber hier sind die Dinge, von denen ich "glaube", dass wir sie wissen.

Platte

Mit dieser Technik können wir eine Momentaufnahme der Slab-Nutzung erhalten. Im Wesentlichen können wir diese Informationen aus /proc/meminfo ziehen .

$ grep Slab /proc/meminfo
Slab:             100728 kB

Module

Außerdem können wir einen Größenwert für Kernel-Module erhalten (unklar, ob es sich um ihre Größe von der Festplatte oder im RAM handelt), indem wir diese Werte aus /proc/modules ziehen :

$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758

Platteninfo

Viele Details über das SLAB sind in dieser Proc-Struktur zugänglich, /proc/slabinfo :

$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000      0      0    320   25    2 : tunables    0    0    0 : slabdata      0      0      0
fuse_request         100    125    632   25    4 : tunables    0    0    0 : slabdata      5      5      0
fuse_inode            21     21    768   21    4 : tunables    0    0    0 : slabdata      1      1      0

Dmesg

Wenn Ihr System startet, gibt es eine Zeile, die die Speichernutzung des Linux-Kernels direkt nach dem Laden meldet.

$ dmesg |grep Memory:
[    0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)

Referenzen

  • Wohin geht die Erinnerung? Speichernutzung im 2.6er Kernel

Wie wäre es damit:

Active / Total Size (% used)       : 4709.24K / 5062.03K

Das ist auf einer frisch gebooteten, sehr kleinen Maschine, die kopflos mit einem normalen Kernel läuft Es braucht also nicht viel.

Wie derobert andeutet, wird der Kernel den verfügbaren Speicher zum Caching verwenden, und das ist eine Menge dessen, was Sie in slabtop sehen . Das hat neben dem File-Cache mit nicht mehr genutztem Shared Memory von Userspace-Prozessen zu tun. Der Kernel belässt es dort, bis entweder das gleiche Zeug erneut benötigt wird oder etwas aktiv RAM benötigt, in diesem Fall wird es vergessen. Eine Analogie wäre, ein Buch aus einem Regal zu nehmen und es offen zum Lesen auf einen Tisch zu legen:Wenn Sie mit dem Lesen fertig sind, können Sie das Buch offen auf dem Tisch liegen lassen, falls Sie es noch einmal ansehen müssen.


Auf diesem 512-GB-RAM-Server, auf dem Solaris ausgeführt wird, verwendet der Kernel 25 GB:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    3210102             25078    5%
Anon                     15266226            119267   23%
Exec and libs               41457               323    0%
Page cache                3539331             27651    5%
Free (cachelist)         13799571            107809   21%
Free (freelist)          30093164            235102   46%

Total                    65949851            515233
Physical                 65927406            515057

Bei diesem kleineren wird mehr als die Hälfte seines Arbeitsspeichers vom Kernel verwendet:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    2149699             16794   52%
Anon                       517016              4039   13%
Exec and libs               15420               120    0%
Page cache                  21840               170    1%
Free (cachelist)             8768                68    0%
Free (freelist)           1404862             10975   34%

Total                     4117605             32168
Physical                  4096002             32000

Kein Grund zur Sorge, ungenutzter RAM ist sowieso verschwendeter RAM.


Linux
  1. Wie verwende ich den basename-Befehl?

  2. Wie funktioniert copy_from_user aus dem Linux-Kernel intern?

  3. Wie bestimmt der Linux-Kernel die Reihenfolge der __init-Aufrufe?

  4. Wie überprüfe ich HZ im Terminal?

  5. Wie viele Daten verwendet SSH normalerweise?

So verwenden Sie den Linux-Grep-Befehl

So verwenden Sie den Verlaufsbefehl unter Linux

Wie viel Swap sollten Sie unter Linux verwenden?

Wie viel Größe wird beim Kompilieren des Linux-Kernels benötigt?

Wie kann die Nutzung des für den Kernel dedizierten Speichers überwacht werden?

Wie lädt Linux das 'initrd'-Image?