Quelle quantité de swap une application Mac utilise-t-elle?

15

Existe-t-il un moyen de savoir si une application particulière exécutée sur Mac OSX (10.2+) a une partie de sa mémoire remplacée (c'est-à-dire vers l'un des /private/var/vm/swapfile*fichiers)? Et combien?

Bounty (150 rps)

Question simple. La première bonne réponse sera acceptée si je la vois avec moins de 2 jours d'expiration de la période de prime. Si je n'en ai toujours pas, je l'attribuerai à celui qui me dira le fait le plus intéressant. Et si je n'ai rien appris de l'une des réponses, j'accorderai la prime à celui qui écrit le plus joliment.

Charles Stewart
la source
C'est une si mauvaise question. Le nombre que vous recherchez changerait parce que vous essayez de le mesurer (pensez au principe d'incertitude de Heisenberg). De plus, il changerait tout le temps en fonction des autres applications et de leurs besoins en mémoire, des modèles io et de la priorité du processus. Si vous trouvez le nombre, cela ne vous servira à rien sauf si vous modifiez le code du système d'exploitation, car il n'y a pas grand-chose que vous allez faire du point de vue de l'application pour le changer.
gavaletz
3
@gavaletz: sortir du mauvais côté du lit ce matin? Je veux le type de profil d'échange que Linux rend possible en utilisant / proc / $ pid / smaps. Je peux généralement identifier les explosions soudaines d'activité de swap en utilisant mes oreilles, donc je ne suis pas trop gêné par le principe d'incertitude de Gavaletz.
Charles Stewart

Réponses:

13

J'ai googlé beaucoup ;-) Si je comprends bien, la mémoire virtuelle d'un processus donné est divisée en pages qui sont gérées par le système d'exploitation et présentées à l'application comme s'il s'agissait de RAM.

Sous OS X, basé sur le noyau Mach, cela est géré par un démon appelé dynamic_pager. Ce processus génère le ou les fichiers d'échange /private/var/vmcomme vous le mentionnez. Ces fichiers d'échange ne sont pas générés par application, mais par "besoin de mémoire". Les fichiers d'échange sont divisés en pages de 4096 octets, puis les pages sont allouées aux processus qui (sont considérés par le système d'exploitation) ont besoin de mémoire virtuelle. Par conséquent, vous ne pouvez pas associer un fichier d'échange à une application donnée, mais vous pouvez voir combien de pages un processus donné utilise.

Vous voudrez peut-être essayer la commande vm_statdans Termial. Cela vous donne une statistique d'utilisation de la machine virtuelle (notez que la «taille de la page» multipliée par le nombre de pages actives est égale à la taille de votre ou vos fichiers d'échange). Cela explique également pourquoi vous pouvez avoir plusieurs processus à l'aide de VM, mais seulement quelques fichiers d'échange.

Les autres commandes amusantes sont vmmap [process id]et pagestuff.

trolle3000
la source
À propos, consultez developer.apple.com/mac/library/documentation/Darwin/Conceptual/… si vous voulez en savoir plus.
trolle3000
Cela semble prometteur. Cela semble apporter une réponse définitive à la première partie de la question et suggère une réponse concrète à la deuxième partie. Je dois creuser plus loin ...
Charles Stewart
N'est-ce pas vmmap [pid]ou vmmap -pages [pid]la réponse pour la deuxième partie de votre question?
trolle3000
vmmap $ pid donne des informations non ambiguës sur ce qu'il classe comme régions inscriptibles. Il ne fait pas de distinction entre la mémoire allouée (c'est-à-dire permutable) et la mémoire échangée pour les régions en lecture seule, mais peut-être que la distinction n'est pas si importante. J'accepterai très probablement cette réponse demain.
Charles Stewart
5

La vmmap PIDcommande devrait vous donner des statistiques utiles en chiffres sur un processus donné.

ayaz
la source
même vmmap [AppName] fonctionne
Studer
4

Sur la base des idées publiées ici, j'ai créé cette petite ligne de code:

sudo vmmap notifyd | grep -A3 'Summary'

qui affiche la section Résumé (3 lignes) de la sortie vmmap. J'ai utilisé notifyddans cet exemple, mais vous pouvez le remplacer par n'importe quel PID que vous connaissez.

Cette ligne va essayer de lister toutes les lignes de résumé de tous les processus en cours d'exécution. Évidemment, certains échoueront car leur identifiant de processus est déjà parti (processus terminé), mais en général, j'ai trouvé que c'était un excellent moyen de faire défiler une liste d'informations sur la mémoire et de repérer le swapper supérieur.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

Modifié: Un utilisateur anonyme a vu que cette dernière ligne de commande avait besoin d'une amélioration car, évidemment, la variante d'origine ne fonctionnait plus. Merci beaucoup qui que vous soyez et je suis désolé que votre modification ait été rejetée. (La première commande a précédemment lu 'ps xa' et a entraîné l'échec de vmmap en raison du titre de ps lancé dessus)

Amélioration supplémentaire: si vous souhaitez connaître immédiatement le nom du programme, utilisez ce petit changement

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

Un petit amendement à l'autre extrémité de cette commande vous permet de filtrer certains noms de programme ou composants de chemin de ligne de commande. Ici, nous examinons tous les processus de 'Library / PrivateFrameworks' uniquement par exemple.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |
Andreas
la source
Je reçois beaucoup d'échecs disant que vmmap ne pouvait pas être lancé en tant que processus 32 mais, ce qui stoppe les xargs. Pour que les cartes continuent, je l'ai fait ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. Il ne s'arrête toujours pas sur ctrl + c, mais il ne s'arrête pas non plus sur les erreurs vmmap.
ShadSterling
0

Ouvrez le Moniteur d'activité dans votre dossier / Applications / Utilitaires et une colonne Mémoire virtuelle vous l'indiquera. Vous pouvez cliquer sur l'en-tête de la mémoire virtuelle pour trier par la plus ou la moins utilisée par application. Assurez-vous également de remplacer Mes processus par Tous les processus et sachez qu'une application peut avoir plusieurs processus. Par exemple, l'application tierce Little Snitch est composée de «Little Snitch Network Monitor» et «Little Snitch UIAgent».

ridogi
la source
4
C'est faux. Le nubmer dans la colonne de mémoire virtuelle est une somme de mémoire actuellement en RAM et sur des fichiers swap, mmapés et je ne sais pas quoi d'autre.
Tadeusz A. Kadłubowski
Êtes-vous sûr? Apple ne le mentionne pas support.apple.com/kb/TA20517
ridogi
1
Le numéro de machine virtuelle mesure le montant alloué mais pas encore utilisé. Les fichiers d'échange auront ce qui est réellement utilisé.
Chealion
@Chealion: comment définissez-vous la mémoire allouée mais pas réellement utilisée?
Tadeusz A. Kadłubowski
@tkadlubo: Dans ce cas, je pense que c'est juste la différence entre la taille de la machine virtuelle déclarée disponible pour un processus et les pages réelles, paginées sur le disque. Je ne sais pas comment le définir au-delà de noter que le numéro de machine virtuelle et les fichiers d'échange sur le disque sont différents.
Chealion
0

Comme l'a dit ridogi, ouvrez le moniteur d'activité. Accédez au processus que vous souhaitez inspecter et cliquez sur ... Inspecter! Cliquez ensuite sur la mémoire; cela vous dira combien de swap le processus donné utilise.

S'amuser!

trolle3000
la source
3
La page d'inspection me dit toutes sortes de choses intéressantes qui sont positivement corrélées avec la réponse à la question, comme #pagefaults, #pageins et la liste des fichiers mmappés, mais nulle part la réponse réelle à la question que je recherche.
Charles Stewart