OVH Cloud OVH Cloud

Consommation de mémoire dans les threads

2 réponses
Avatar
Adrien
Bonsoir tout le monde,

J'utilise actuellement les threads dans un projet et j'ai été très
étonné lorsque j'ai vu la taille de la mémoire occuppée avec les
threads.

Voici un exemple simple :

#!/usr/bin/perl -w

use threads;

sub test
{
while (1 == 1)
{
sleep 30;
}
}

for (my $i = 0; $i < 40; $i++)
{
my $thr = threads->new(\&test);
$thr->detach;
}

sleep 60;


Et voici le résultat d'un ps :

bacto 13621 3.4 1.8 106944 16936 ttyp1 S+ 22:25 0:00 perl test.pl
(repeté 40 fois).

En resumé, j'ai donc 40 threads de lancés qui ne font rien, qui n'ont
normalement quasiment rien en mémoire, et pourtant j'obtiens une
consommation de 1,8% de RAM (1024Mo au total).

Je trouve ça énorme...

Y'a t'il quelque chose que j'ai raté ou alors est-ce bien normal ? Y'a
t'il un moyen de contourner cela (via les threads ou une autre méthode)
?

Merci d'avance pour votre aide :)

2 réponses

Avatar
Fox
Et voici le résultat d'un ps :

bacto 13621 3.4 1.8 106944 16936 ttyp1 S+ 22:25 0:00 perl test.pl
(repeté 40 fois).

En resumé, j'ai donc 40 threads de lancés qui ne font rien, qui n'ont
normalement quasiment rien en mémoire, et pourtant j'obtiens une
consommation de 1,8% de RAM (1024Mo au total).


Bonsoir Adrien,
L'occupation mémoire affichée par le ps ne s'additionne pas facilement.
Il faut fouiller le man du ps et des mécanismes de gestion mémoire pour
y voir clair. C'est informations sont très proches du système et donc il
faut consulter la documentation la plus récente et la plus proche du
système utilisé (linux distribution version).

En général, et amha :
La mémoire utilisée par un processus comprends une partie data et une
partie code. La partie code est commune à l'ensemble des processus de
même type (pour 10 processus on ne la compte qu'une seule fois).

NB: Une partie de la mémoire affichée par le ps peut être du swap (et
donc pas en ram).

Bernard - Tuner AIX

Avatar
Jacques Caron
Salut,

On Wed, 26 Apr 2006 22:28:52 +0200, Adrien wrote:

bacto 13621 3.4 1.8 106944 16936 ttyp1 S+ 22:25 0:00 perl
test.pl
(repeté 40 fois).


Tu ne nous dis pas quel OS et quelle version et tout ça...

En resumé, j'ai donc 40 threads de lancés qui ne font rien, qui n'ont
normalement quasiment rien en mémoire, et pourtant j'obtiens une
consommation de 1,8% de RAM (1024Mo au total).


1. je pense que perl lui-même bouffe plus qu'autre chose. Fais un bête
"perl -e 'sleep 60'" et regarde combien il utilise dans ps...
2. la plupart des OS un peu décents partagent la mémoire entre les
processsus (en particulier tout l'exécutable, les libraires chargées
dynamiquement, etc.). Donc 20 processus qui utilisent 1 Mo chacun ça ne
fait pas forcément 20 Mo utilisés...

Jacques.
--
Oxado http://www.oxado.com/