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.
macos
mac
swap
virtual-memory
Charles Stewart
la source
la source
Réponses:
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/vm
comme 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_stat
dans 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]
etpagestuff
.la source
vmmap [pid]
ouvmmap -pages [pid]
la réponse pour la deuxième partie de votre question?La
vmmap PID
commande devrait vous donner des statistiques utiles en chiffres sur un processus donné.la source
Sur la base des idées publiées ici, j'ai créé cette petite ligne de code:
qui affiche la section Résumé (3 lignes) de la sortie vmmap. J'ai utilisé
notifyd
dans 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.
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
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.
la source
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.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».
la source
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!
la source