Il existe une question similaire à ceci et répondant à la même question ici pour informer les gens de la façon dont linux proc stat vm info n'est actuellement pas précise.
Valgrind peut afficher des informations détaillées, mais il ralentit considérablement l'application cible, et la plupart du temps, il modifie le comportement de l'application.
Je suppose que tout le monde veut savoir WRT "utilisation de la mémoire" est la suivante ...
Dans Linux, la quantité de mémoire physique d'un processus peut utiliser peut être divisée en catégories suivantes.
- Ma anonyme cartographié la mémoire
- .p privé
- .d sale == malloc/tas mmapped et pile alloué et de la mémoire écrit
- .c propre == malloc/tas mmapped et empiler la mémoire une fois allouée, écrite, puis libérée, mais pas encore récupérée
- .s partagé
- .d sale == il devrait y avoir aucun
- .c propre == il devrait y avoir aucun
- Mn appelée mémoire mappée
- .p privé
- .d sale == fichier mmapped mémoire écrite privée
- .c propre == programme cartographié/texte bibliothèque privée mappée
- .s partagé
- .d sale fichier == mmapped écrit la mémoire partagée
- .c == propre texte mis en correspondance bibliothèque partagée mappée
Je préférerais obtenir les chiffres comme suit pour obtenir les chiffres réels moins Ove rhead.
Vous devez les additionner afin de diviser ce que PS montre comme RSS et obtenir des nombres plus précis pour ne pas confondre.
/proc/(pid)/status essaie d'afficher ces nombres, mais ils échouent. Donc au lieu d'essayer d'étiqueter [anon], [pile], correctement à chaque mapping, mon souhait est que les gens du noyau Linux vont mettre à jour le code d'entrée proc pour additionner et montrer ces Mapd, Mapc, Mnpd, .... Nombres.
Les gens de linux embarqués seront vraiment heureux à mon humble avis.
M.a.p.d:
awk '/^[0-9a-f]/{if ($6=="") {anon=1}else{anon=0}} /Private_Dirty/{if(anon) {asum+=$2}else{nasum+=$2}} END{printf "sum=%d\n",asum}' /proc/<pid>/smaps
M.a.p.c:
awk '/^[0-9a-f]/{if ($6=="") {anon=1}else{anon=0}} /Private_Clean/{if(anon) {asum+=$2}else{nasum+=$2}} END{printf "sum=%d\n",asum}' /proc/<pid>/smaps
M.n.p.d: ... et ainsi de suite