OVH Cloud OVH Cloud

Identification d'un memory leak

5 réponses
Avatar
s45_pas_de_spam
Bonjour,

Je pense avoir un memory leak. Afin d'identifier la source de celui-ci,
je suis en train d'ecrire un petit script.
Comment se fait-il que la memoire utilisee (recuperee par un free -o)
est largement superieure =E0 la somme de celle utilisee par tous les
processes (quand que ja fais un ps -ef) sachant que le swap used est =E0
0=2E

Sylvain

5 réponses

Avatar
lhabert
"" :

Comment se fait-il que la memoire utilisee (recuperee par un free -o)
est largement superieure à la somme de celle utilisee par tous les
processes (quand que ja fais un ps -ef) sachant que le swap used est à
0.


Le noyau utilise de la mémoire. En particulier pour le cache disque.

Avatar
s45_pas_de_spam
Comment identifier la memoire utilisee par le noyau?

Sylvain
Avatar
l'indien
On Wed, 28 Sep 2005 01:09:09 -0700, wrote:

Comment identifier la memoire utilisee par le noyau?


Tu as des statistiques disponibles dans /proc/slabinfo
D'un autre coté, ce n'est pas parce que tu n'utilise pas de swap que tu
ne swappe pas.
Le code qui n'a jamais été executé ou qui a été swappé ne va pas
dans le swap: ce serait du gachis, vu qu'il est déjà disponible dans un
fichier sur le disque.
De plus, on peut très bien allouer de la mémoire virtuelle sans consomer
de mémoire physique, tant qu'on écrit pas dedans...

Avatar
s45_pas_de_spam
Comment calculer la memoire totale utilisee par le noyau avec slabinfo?
En prenant la troisieme colonne (memoire de chaque process) sauf pour
les lignes ou j'ai size-xxx?
Avatar
l'indien
On Wed, 28 Sep 2005 01:32:39 -0700, wrote:

Comment calculer la memoire totale utilisee par le noyau avec slabinfo?
En prenant la troisieme colonne (memoire de chaque process) sauf pour
les lignes ou j'ai size-xxx?


Il n'y a pas de process en jeu, plutôt des "pools" de mémoire, là.

Je dirais en faisant la somme ligne à ligne des produits des colonnes
<num_objs> (col 3) x <objsize> (col 4). Ca te donnera la taille totale
allouée.
Mais la taille consomée sera fatalement plus grande: toute page
de mémoire entamée n'est plus disponible pour autre chose, même si 1
seul octet est utilisé dedans.
Pour avoir la taille de la mémoire physique consomée, je prendrais la
somme ligne à ligne des produits <pagesperslab> (col 6) x <num_slabs>
(2è col après l'item 'slabdata'), en sachant qu'une page fait 4 Ko.