著者: Edgar Bonet 日付: To: guilde 題目: Re: Swap bizarre
Salut !
Le lundi 10 septembre, Nicolas Tripon a écrit : > >Voici un remplisseur de mémoire plus rapide et quantitatif :
>
> C'est bien ! (Mais que veut dire "quantitatif" ?)
Ça veut dire que tu es capable de quantifier (c'est à dire de connaître
la quantité) la mémoire utilisée.
> $ a=12345678
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a$a$a$a$a$a$a
> $ a=$a$a # ici, $a a une longueur de 256 Mo
En faisant cette expérience, d'après ps mon bash a gonflé de près de
2 Go en mémoire virtuelle (VSZ) et 850 Mo en mémoire physique (RSS) :
j'ai 1 Go de RAM et il a presque tout bouffé. D'après free, la mémoire
utilisée (Mem used - buffers/cache + Swap used) a gonflé de 1 Go.
Tu as bien calculé que la variable a fait 256 Mo de long, mais en
réalité la mémoire utilisée par bash pour gérer cette variable est sans
commune mesure avec la longueur de la variable. Donc tu ne sais pas
vraiment a priori combien de mémoire tu vas consommer avec cette manip.
> $ free
Chez moi ça donne : « -bash: fork: Cannot allocate memory », même après
avoir fait unset a. D'ailleurs unset a est loin de libérer toute la
mémoire, il faut tuer le shell.
Avec le code que j'ai donné, si je demande 8 processus à 128 Mo, j'ai la
mémoire qui gonfle (d'après free) précisément de 1 Go. D'après ps chacun
des 8 processus mesure 129 Mo de VSZ (mais le Mo supplémentaire est en
grande partie partagé par les 8 processus) et entre 11 Mo (le premier de
ces processus qui s'est largement fait swapper) et 128 Mo de RSS.
> doubler $a tue le shell sur cette machine.
Après il faut fork()er plusieurs processus.
> Mais je n'ai peut-être pas bien compris le problème initial.
Frédéric voulait obliger son noyau à remplir plus de la moitié du swap
disponible, pour s'assurer qu'il en était bien capable.