Cette question est motivée par mon choc lorsque j'ai découvert que le noyau Mac OS X utilise 750 Mo de RAM .
J'utilise Linux depuis 20 ans et j'ai toujours "su" que l'utilisation de la mémoire RAM du noyau est réduite à néant par X (est-il vrai? L'a-t-il jamais été vrai?).
Alors, après quelques recherches sur Google, j'ai essayé slabtop
qui m'a dit:
Active / Total Size (% used) : 68112.73K / 72009.73K (94.6%)
Est-ce que cela signifie que mon noyau utilise environ 72 Mo de RAM maintenant?
(Etant donné que le RSS de ces top
rapports Xorg
est 17M, le noyau est maintenant plus petit que X, et non l’inverse).
Quelle est l'utilisation "normale" de la mémoire RAM du noyau (plage) pour un ordinateur portable?
Pourquoi MacOS utilise-t-il un ordre de grandeur supérieur à celui de Linux?
PS Aucune réponse ici abordée la dernière question, alors s'il vous plaît voir les questions connexes:
echo 3 > /proc/sys/vm/drop_caches
, alors je n'ai que 80 Mo utilisés.Réponses:
Le noyau est un peu impropre. Le noyau Linux est composé de plusieurs processus / threads + les modules (
lsmod
). Ainsi, pour obtenir une image complète, vous devez examiner la totalité de la balle et non pas un seul composant.Incidemment, le mien montre
slabtop
:La page de manuel pour
slabtop
aussi avait ceci à dire:Déposer des caches
Si je laisse tomber mes caches, comme @derobert l’a suggéré dans les commentaires sous votre question, a pour moi les avantages suivants:
L'envoi d'un 3 a les conséquences suivantes: pagecache, dentries et inodes gratuits. Je discute davantage de cela dans ce Q & A 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 simplement en maintenant les informations concernant pagecache, dentries et inodes.
Information additionnelle
slabtop
un peu plus en détail. Il s'intitule: Commande Linux du jour: slabtop .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" que nous savons.
Dalle
Nous pouvons obtenir un instantané de l'utilisation de la dalle en utilisant cette technique. Essentiellement, nous pouvons extraire cette information
/proc/meminfo
.Modules
Nous pouvons également obtenir une valeur de taille pour les modules du noyau (indiquez s'il s'agit de leur taille sur le disque ou en RAM) en extrayant ces valeurs de
/proc/modules
:Slabinfo
Une grande partie des détails sur le SLAB sont accessibles dans cette structure de proc
/proc/slabinfo
:Dmesg
Lorsque votre système démarre, une ligne indique l'utilisation de la mémoire du noyau Linux juste après son chargement.
Références
la source
grep Slab /proc/meminfo
./proc/slabinfo
qui semble être la sourceslabtop
, on peut donc calculer les montants à partir d'ici pour un décompte total plus précis./proc/modules
est plus susceptible d'être chargée taille de la mémoire en mémoire que les modules sur disque sont normalement compressés (par exemple sur Fedora 27 c'est xz), j'ai vérifiétg3
pilote NIC ne correspond pas à la taille en octets apparaissant dans/proc/modules
.Que dis-tu de ça:
C'est sur une très petite machine fraîchement démarrée qui tourne sans tête avec un noyau normal. Donc, il n'en faut pas beaucoup.
Comme le suggère Derobert, le noyau utilisera la mémoire disponible pour la mise en cache, ce qui correspond à beaucoup de ce que vous voyez
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 le même matériel soit de nouveau nécessaire ou que quelque chose ait activement besoin de mémoire vive (RAM), auquel cas il est oublié. Une analogie consisterait à retirer un livre d’une étagère et à l’ouvrir 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 relire.la source
Sur ce serveur RAM de 512 Go sous Solaris, le noyau utilise 25 Go:
Ce plus petit a plus de la moitié de sa RAM utilisée par le noyau:
Rien à craindre, la RAM non utilisée est de toute façon une perte de RAM.
la source
echo ::memstat | mdb -k
sur des serveurs de production Solaris 10 antérieurs à la mise à jour 10/09.