Pourquoi la valeur de VSIZE en haut est différente de la valeur de VSZ (Virtual set size) en ps?

9

Je sais que VSZ in pscorrespond à l'espace d'adressage total alloué à l'application et est parfois aliasé vsize (mentionné dans la page de manuel de pssur linux), mais quelle est la définition de VSIZE top? Cette sortie supérieure de l'iPhone est différente de celle du haut sur Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Ralph Wen
la source
Je ne peux pas reproduire cela sur aucune de mes machines Darwin. Cela me fait penser que le shell qu'ils ont configuré sur l'iphone avait un ensemble de blocs étrange?
polynôme
ils semblent calculer RSIZE / rss de la même manière, mais ps rapporte un vsz 2,5x plus grand que celui rapporté par top. peut-être topsur IOS n'inclut pas les objets partagés dans vsize, ou quelque chose.
Tim Kennedy
"Cette sortie supérieure de l'iPhone est différente de celle du haut sur Linux" - n'est-ce pas une surprise, n'est-ce pas?
poige

Réponses:

5

Le système de mémoire Linux est rempli de nombreuses routines d'utilitaires d'optimisation de la mémoire et de partage de mémoire, ce qui rend l'idée même de la façon dont la mémoire est partagée et consommée parmi, une approche lourde. sous /procsystème de fichiers. Particulièrementps, RSS (mémoire de taille résidente) et VSIZE (taille de mémoire virtuelle) sont tous deux importants, mais VSIZE ne montre pas l'utilisation précise de la mémoire et la différence entre VSIZE et rss est ce qui est réellement prévu et alloué au programme pendant l'initialisation mais peut ne pas encore être référencé. Comme le programme peut avoir de nombreuses bibliothèques liées, mais elles ne sont pas encore chargées car elles ne sont pas encore référencées dans le programme d'exécution réel. RSS donne la mémoire totale réellement utilisée par le programme mais peut ne pas donner une image réelle de la consommation de mémoire, car la plupart de la mémoire allouée peut être partagée avec d'autres instances du même processus ou d'autres processus. Regarder sous /proc/<processid>/mapspeut donner une idée approximative de la façon dont la mémoire a été utilisée, mais ils peuvent parfois être trompeurs. Utilisationpmap -x <pid> à partir de la ligne de commande, utile pour voir la propagation est.

Les utilitaires souvent meilleurs sont freeet vmstat. freevous donnera des détails sur la consommation de mémoire actuelle et vmstat peut être utilisé pour voir à quelle fréquence il est mis à jour.

Nikhil Mulley
la source
Une autre raison ou explication réfléchie pour laquelle ps ne devrait PAS être considérée comme donnant une utilisation correcte de la mémoire de processus. Lisez ceci sur virtualthreads.blogspot.com/2006/02/…
Nikhil Mulley
2
Ce que l'affiche de cette réponse tente de dire, c'est que la définition de la mémoire utilisée est complexe et variée. Il n'y a pas un seul endroit dans le noyau où il est suivi et signalé. Les utilitaires effectuent leur propre interprétation des nombreuses statistiques rapportées par le noyau.
Johan