Je cherche à récupérer la mémoire consommée par un processus lancé comme benchmark. Je cherche à rendre cela automatique.
Time propose de rendre des informations sur la mémoire en plus du temps passé, mais il rend toujours "0".
J'ai lu cette page mais cela a l'air bien complexe:
http://elinux.org/Runtime_Memory_Measurement
En gros, elle suggère de lancer le test puis d'aller fouiller dans /proc ou dans la commande ps. Le problème est qu'il peut y avoir une race condition et que l'on ne peut pas avoir la "taille max".
La commande statique size permet d'avoir déjà beaucoup d'information (taille des données statiques et du code). Mais j'aimerais avoir les tailles allouées par malloc() et la taille de la pile sans devoir instrumenter mon code.
Donc, est-ce que vous connaissez un moyen simple d'avoir la taille max de la mémoire consommé par le tas (malloc) et la pile sur un processus "court" ? Ou est-ce que je vais devoir bricoler avec un ps lancé en parallèle ?
# valgrind
Posté par cedric . Évalué à 10.
Mais syncerement, massif pour analyser la conso memoire et callgrind pour analyser le temp passe dans chaque operation sont les deux seuls outils qui te donneront des informations fiables et utilisable.
[^] # Re: valgrind
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
"La première sécurité est la liberté"
# a la mimine
Posté par vincent LECOQ (site web personnel) . Évalué à 3.
ca ralentira considerablement le processus, mais tu pourra l'appliquer a n'importe quel process.
[^] # Re: a la mimine
Posté par Sebastien (site web personnel) . Évalué à 1.
Hum, tu es sûr de ce que tu dis? Il me semble que malloc n'est pas un appel système, mais une fonction de la libc. À moins que tu ne veuilles parler de brk(2)? Enfin, sans aller jusque là, la technique "habituelle" serait de faire un dlopen/dlsym de la libc et du symbole de malloc().
seb.
[^] # Re: a la mimine
Posté par benoar . Évalué à 2.
# struct rusage
Posté par Uriel Corfa . Évalué à 2.
long ru_maxrss; /* max resident set size */
#define ru_first ru_ixrss
long ru_ixrss; /* integral shared memory size */
long ru_idrss; /* integral unshared data " */
long ru_isrss; /* integral unshared stack " */
tu n'as pas cette info ?
Source :
man 2 wait4
/usr/include/sys/ressource.h
[^] # Re: struct rusage
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
Je vais regarder.
"La première sécurité est la liberté"
# Journal ?!
Posté par Kerro . Évalué à -1.
Et lorsque tu voudras faire un journal, tu en feras une dépêche de première page ?
[^] # Re: Journal ?!
Posté par Nicolas Boulay (site web personnel) . Évalué à 9.
"La première sécurité est la liberté"
[^] # Re: Journal ?!
Posté par Maclag . Évalué à 2.
# exmap
Posté par liberforce (site web personnel) . Évalué à 5.
Exemple pour le processus nautilus :
exmap nautilus
http://pastebin.com/m73c72c92
Exmap est très verbeux par défault, mais il y a des options de filtrage et de tri. Il t'affiche aussi une donnée bien sympathique: le "sole use" qui est la quantité de mémoire réellement consommée par le processus. Par exemple pour une appli GTK, les bibliothèques GTK sont partagées entre différent processus. Le sole use ne montre donc que la mémoire que seule cette application utilise, ce qui est un bonne indicateur de sa consommation mémoire réelle, quand tu es dans l'environnement cible. Ici, nautilus consommerait plus en "sole use" s'il était chargé dans un environnement KDE, vu qu'il serait la seule appli en cours d'utilisation utilisant les bibliothèques GNOME.
Voici une vue plus synthétique des informations fournies par exmap :
exmap --no-file-info nautilus
Process 4397 [nautilus]
Virtual memory : 92812 KB
Effective VM : 86660 KB
Heap : 6680 KB
Stack : 260 KB
vdso : 0 B
Mapped : 18704 KB
Effective mapped: 12552 KB
Sole use : 8792 KB
[^] # Re: exmap
Posté par liberforce (site web personnel) . Évalué à 0.
cat /proc/$(pgrep nautilus)/status | grep VmPeak
[^] # Re: exmap
Posté par liberforce (site web personnel) . Évalué à 5.
grep VmPeak /proc/$(pgrep nautilus)/status
[^] # Re: exmap
Posté par plic . Évalué à 5.
http://partmaps.org/era/unix/award.html#cat
La faculté de citer est un substitut commode à l'intelligence -- Somerset Maugham
[^] # Re: exmap
Posté par skeespin (site web personnel) . Évalué à 2.
# un petit truc...
Posté par Tonton Th (Mastodon) . Évalué à 1.
/*
* Warning: this function was a GNU/Linuxism !
*/
malloc_stats();
# un compte rendu
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
- valgrind avec massif
- valgrind avec memcheck
- exmap
- le grep de VmPeak
Pas un seul ne donne les mêmes résultats. En effet, entre les effets de partages mémoire (library), le COW, l'allocation paraisseuse (après un malloc il faut effectivement accéder à une page pour qu'elle soit lu), que le chiffre est différent.
memcheck donne ce qui est demander par malloc(). Dans mon cas, 3Go.
massif donne des résultats étranges sur mon cas de test. Mais je n'ai pas la dernière version.
exmap marque les pages utilisées réellement par le noyau (c'est un module noyau), on a donc les pages utilisées uniquement par le processus analysées (125Ko dans mon cas).
Vmpeak correspond à la demande au système de pagination du noyau. J'ai 1Go dans mon cas, ce qui correspond à ma RAM (qui est inférieur au malloc de 3Go).
Mon cas de test est spécial, mais finalement, cela montre bien la complexité de mesure de la mémoire consommée.
"La première sécurité est la liberté"
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.