Kernel est un peu un abus de langage. Le noyau Linux est composé de plusieurs processus/threads + les modules (lsmod
) afin d'obtenir une image complète, vous devez regarder l'ensemble de la balle et pas seulement un seul composant.
Incidemment le mien affiche slabtop
:
Active / Total Size (% used) : 173428.30K / 204497.61K (84.8%)
La page de manuel pour slabtop
avait aussi ceci à dire :
L'en-tête de statistique slabtop suit le nombre d'octets de dalles utilisés et non une mesure de la mémoire physique. Le champ 'Slab' dans le fichier /proc/meminfo suit les informations sur la mémoire physique slab utilisée.
Supprimer les caches
La suppression de mes caches comme @derobert l'a suggéré dans les commentaires sous votre question me fait ce qui suit :
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$
Active / Total Size (% used) : 61858.78K / 90524.77K (68.3%)
L'envoi d'un 3 fait ce qui suit :pagecache, dentries et inodes gratuits. J'en parle plus dans ce Q&A U&L intitulé :Existe-t-il des moyens ou des outils pour vider le cache mémoire et la mémoire tampon ?". Ainsi, 110 Mo de mon espace étaient utilisés en conservant simplement les informations concernant le pagecache, les dentries et les inodes.
Informations supplémentaires
- Si cela vous intéresse, j'ai trouvé cet article de blog qui traite de
slabtop
dans un peu plus de détails. Elle s'intitule :Commande Linux du jour :slabtop. - Le Slab Cache est discuté plus en détail ici sur Wikipedia, intitulé :Slab allocation.
Alors, combien de RAM mon noyau utilise-t-il ?
Cette image est un peu plus floue pour moi, mais voici les choses que je "pense" savoir.
Dalle
Nous pouvons obtenir un instantané de l'utilisation de Slab en utilisant cette technique. Essentiellement, nous pouvons extraire ces informations de /proc/meminfo
.
$ grep Slab /proc/meminfo
Slab: 100728 kB
Modules
Nous pouvons également obtenir une valeur de taille pour les modules du noyau (il n'est pas clair si c'est leur taille sur le disque ou dans la RAM) en extrayant ces valeurs de /proc/modules
:
$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758
Info dalle
La plupart des détails sur le SLAB sont accessibles dans cette structure de procédure, /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
Lorsque votre système démarre, une ligne signale l'utilisation de la mémoire du noyau Linux juste après son chargement.
$ dmesg |grep Memory:
[ 0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)
Références
- Où va la mémoire ? Utilisation de la mémoire dans le noyau 2.6
Que diriez-vous de ceci :
Active / Total Size (% used) : 4709.24K / 5062.03K
C'est sur une très petite machine fraîchement démarrée fonctionnant sans tête avec un noyau normal. Donc ça ne demande pas grand chose.
Comme l'indique derobert, le noyau utilisera la mémoire disponible pour la mise en cache et c'est en grande partie ce que vous voyez dans slabtop
. En plus du cache de fichiers, cela concerne la mémoire partageable des processus de l'espace utilisateur qui n'est plus utilisée. Le noyau le laisse là jusqu'à ce que la même chose soit à nouveau requise, ou bien quelque chose a activement besoin de RAM, auquel cas il est oublié. Une analogie serait de prendre un livre sur une étagère et de le poser ouvert pour le lire sur une table :lorsque vous avez fini de lire, vous pouvez laisser le livre ouvert sur la table au cas où vous auriez besoin de le regarder à nouveau.
Sur ce serveur de 512 Go de RAM exécutant Solaris, le noyau utilise 25 Go :
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
Ce plus petit a plus de la moitié de sa RAM utilisée par le noyau :
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
Rien à craindre, la RAM inutilisée est de toute façon de la RAM gaspillée.