Ceci est une ancienne révision du document !


Connaître la mémoire utilisée à l'instant t au cours de l’exécution

  • regarder le fichier /proc/pid/status où pid est l'identificateur du process (le répertoire /proc/pid existe et est tenu à jour par Linux seulement pendant l'exécution de ce process).

Il y a ici les diverses mémoires utilisées par le process dont VmPeak (virtuelle), VmHWM (physique), VmRSS (résiduelle). La résiduelle devrait suffire dans ton analyse.

  • regarder “top” - on peut rajouter des colonnes en tapant “f” (fields) ; “top” se base sur les informations contenues dans /proc/pid/status
  • on peut aussi accéder aux informations contenues dans /proc/pid/status depuis le programme lui même. Par exemple, en C :

https://bitbucket.org/code_aster/codeaster-src/src/tip/bibc/utilitai/mempid.c

Avoir une évolution (une courbe) au cours du temps

  • soit on se fait notre propre script pour lire régulièrement les infos de /proc/pid/status
  • soit on appelle top en background (et éventuellement on redirige la sortie vers un fichier d'output)
top -b -n 100 -d 1 -p pid > output

où pid est à remplacer par le numéro du process qu'on veut suivre (qui est obtenu avec top ou ps, mais on peut automatiser) (ou 100 est le nombre de fois et 1 c'est le pas en secondes)

  • soit on appelle la fonction C ci-dessus à certains points du programme (là où on sait qu'il y a eu des allocations/desalocations mémoire importantes)
  • soit on utilise des paquets déjà faits, comme ceux-ci (psutil ou ressource) en Python :

http://fa.bianp.net/blog/tag/memory_profiler.html

  • soit on utilise des outils d'analyse plus puissants (mais plus difficiles à les apprendre), p.ex. Valgrind (avec son module “massif”)
faq/consommation_memoire.1516789727.txt.gz · Dernière modification : 2020/08/25 15:58 (modification externe)