Vous pouvez obtenir ce genre d'informations auprès du /proc/<pid>/smaps
pour chaque processus sous la forme du fichier Pss
(abréviation de "Proportional share size").
Dans l'exemple ci-dessus avec 200MB "partagés" entre deux processus, chaque processus afficherait 100MB dans l'entrée PSS pour ce mappage, c'est-à-dire que la mémoire est distribuée de manière égale entre les processus qui la partagent (jusqu'à ce qu'elle soit copiée et non partagée par l'un ou l'autre processus).
Voici un extrait de l'exécution de quelque chose comme ce que vous avez posté :
$ top
...
30986 me 20 0 790m 769m 2200 S 0 4.8 0:00.48 python3.2
30987 me 20 0 790m 767m 224 S 0 4.8 0:00.00 python3.2
$ cat /proc/30986/smaps
...
0119a000-015b7000 rw-p 00000000 00:00 0 [heap]
Size: 4212 kB
Rss: 3924 kB
Pss: 1992 kB
...
7fa06b020000-7fa09ab11000 rw-p 00000000 00:00 0
Size: 781252 kB
Rss: 781252 kB
Pss: 390626 kB
...
7fff8e45a000-7fff8e489000 rw-p 00000000 00:00 0 [stack]
Size: 192 kB
Rss: 160 kB
Pss: 82 kB
...
(Il y a un lot de choses dans ces fichiers, y compris les mappages pour les bibliothèques partagées qui sont potentiellement partagées entre de nombreux processus, et donc chaque processus ne reçoit qu'une petite partie comptabilisée dans son entrée PSS pour ceux-ci).
Voici un bon article à ce sujet : ELC : Quelle quantité de mémoire les applications utilisent-elles réellement ?
Je ne connais pas d'outil commun de type "top" pour afficher ces informations, et je ne pense pas que l'on puisse trouver une solution à ce problème. ps
n'a pas d'options pour montrer cela non plus malheureusement. L'article pointe vers un dépôt avec des scripts Python appelé pagemap
par Matt Mackall que vous pourriez utiliser ou adapter.
Shameless plug : vous trouverez quelques posts sur <a href="https://unix.stackexchange.com/search?q=pss">Unix et Linux </a>sur PSS et le <code>smaps</code> si cela vous intéresse.