Avec ps
ou des outils similaires, vous n'obtiendrez que la quantité de pages mémoire allouées par ce processus. Ce numéro est correct, mais :
-
ne reflète pas la quantité réelle de mémoire utilisée par l'application, uniquement la quantité de mémoire qui lui est réservée
-
peut être trompeur si les pages sont partagées, par exemple par plusieurs threads ou en utilisant des bibliothèques liées dynamiquement
Si vous voulez vraiment savoir quelle quantité de mémoire votre application utilise réellement, vous devez l'exécuter dans un profileur. Par exemple, Valgrind peut vous donner des informations sur la quantité de mémoire utilisée et, plus important encore, sur les éventuelles fuites de mémoire dans votre programme. L'outil de profilage de tas de Valgrind s'appelle 'massif' :
Massif est un profileur de tas. Il effectue un profilage détaillé du tas en prenant des instantanés réguliers du tas d'un programme. Il produit un graphique montrant l'utilisation du tas au fil du temps, y compris des informations sur les parties du programme qui sont responsables de la plupart des allocations de mémoire. Le graphique est complété par un fichier texte ou HTML qui inclut plus d'informations pour déterminer où la plus grande quantité de mémoire est allouée. Massif exécute les programmes environ 20 fois plus lentement que la normale.
Comme expliqué dans la documentation de Valgrind, vous devez exécuter le programme via Valgrind :
valgrind --tool=massif <executable> <arguments>
Massif écrit un vidage des instantanés d'utilisation de la mémoire (par exemple, massif.out.12345
). Ceux-ci fournissent, (1) une chronologie de l'utilisation de la mémoire, (2) pour chaque instantané, un enregistrement de l'endroit où la mémoire de votre programme a été allouée. Un excellent outil graphique pour analyser ces fichiers est massif-visualizer. Mais j'ai trouvé ms_print
, un simple outil textuel livré avec Valgrind, déjà d'une grande aide.
Pour trouver des fuites de mémoire, utilisez le (par défaut) memcheck
outil de valgrind.
Essayez la commande pmap :
sudo pmap -x <process pid>