¿Cuánto intercambio utiliza una aplicación de Mac determinada?

15

¿Hay alguna forma de saber si una aplicación en particular que se ejecuta en Mac OSX (10.2+) tiene parte de su memoria intercambiada (es decir, a uno de los /private/var/vm/swapfile*archivos)? ¿Y cuánto?

Recompensa (150 rps)

Pregunta simple. La primera respuesta correcta será aceptada si la veo con menos de 2 días de vencimiento del período de recompensa. Si todavía no tengo uno, se lo otorgaré a quien me diga el hecho nuevo más interesante. Y si no aprendí nada de ninguna de las respuestas, otorgaré la recompensa a quien escriba con más precisión.

Charles Stewart
fuente
Esta es una pregunta tan mala. El número que está buscando cambiaría porque estaba tratando de medirlo (piense en el principio de incertidumbre de Heisenberg). Además, cambiaría todo el tiempo dependiendo de otras aplicaciones y sus requisitos de memoria, patrones io y prioridad de proceso. Si encuentra el número, no le servirá de nada a menos que esté editando el código del sistema operativo, porque es poco lo que va a hacer desde el punto de vista de la aplicación para cambiarlo.
gavaletz
3
@gavaletz: ¿Salir del lado equivocado de la cama esta mañana? Quiero el tipo de perfil de intercambio que Linux hace posible usando / proc / $ pid / smaps. Por lo general, puedo identificar estallidos repentinos de actividad de intercambio con mis oídos, por lo que no me preocupa demasiado el principio de incertidumbre de gavaletz.
Charles Stewart,

Respuestas:

13

He estado buscando mucho en Google ;-) Según tengo entendido, la memoria virtual de un proceso dado se divide en páginas que son manejadas por el sistema operativo y presentadas a la aplicación como si fuera RAM.

En OS X, basado en el núcleo Mach, esto lo maneja un demonio llamado dynamic_pager. Este proceso genera los archivos de intercambio /private/var/vmcomo usted menciona. Estos archivos de intercambio no se generan por aplicación, sino por "necesidad de memoria". Los archivos de intercambio se dividen en páginas de 4096 bytes, y las páginas se asignan a los procesos que (según el sistema operativo) necesitan memoria virtual. Por lo tanto, no puede asociar un archivo de intercambio con una aplicación determinada, pero puede ver cuántas páginas está utilizando un proceso determinado.

Es posible que desee probar el comando vm_staten Termial. Esto le proporciona una estadística del uso de VM (tenga en cuenta que 'tamaño de página' multiplicado por el número de páginas activas es igual al tamaño de sus archivos de intercambio). Esto también explica por qué puede tener múltiples procesos usando VM, pero solo un par de archivos de intercambio.

Otros comandos divertidos son vmmap [process id]y pagestuff.

trolle3000
fuente
Por cierto, visita developer.apple.com/mac/library/documentation/Darwin/Conceptual/… si quieres saber más.
trolle3000
Esto parece prometedor. Esto parece proporcionar una respuesta definitiva a la primera parte de la pregunta, y sugiere una respuesta concreta a la segunda parte. Necesito cavar más lejos ...
Charles Stewart
¿No es vmmap [pid]o vmmap -pages [pid]la respuesta para la segunda parte de su pregunta?
trolle3000
vmmap $ pid proporciona información inequívoca sobre lo que clasifica como regiones grabables. No distingue entre memoria asignada (es decir, intercambiable) e intercambiada para regiones de solo lectura, pero tal vez la distinción no sea tan importante. Es muy probable que acepte esta respuesta mañana.
Charles Stewart
5

El vmmap PIDcomando debería darle algunas estadísticas útiles en números sobre un proceso dado.

ayaz
fuente
incluso vmmap [AppName] funciona
Studer
4

Basado en las ideas publicadas aquí, creé esta pequeña línea de código:

sudo vmmap notifyd | grep -A3 'Summary'

que muestra la sección Resumen (3 líneas) de la salida de vmmap. Lo he usado notifyden este ejemplo, pero puede reemplazarlo con cualquier PID que conozca.

Esta línea intentará enumerar todas las líneas de resumen de todos los procesos en ejecución. Obviamente, algunos fallarán porque su identificación de proceso ya no está (proceso finalizado), pero en general descubrí que esta es una excelente manera de desplazarse por una lista de información de memoria y detectar el intercambiador superior.

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

Editado: algún usuario anónimo vio que esta última línea de comando necesitaba una mejora porque obviamente la variante original ya no funcionaba. Así que muchas gracias, sea quien sea, y lamento que su edición haya sido rechazada. (El primer comando leyó anteriormente 'ps xa' y dio como resultado que vmmap fallara debido al título de ps que se le arrojó)

Mejora adicional: si desea saber el nombre del programa de inmediato, use este pequeño cambio

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

Una pequeña enmienda en el otro extremo de este comando le permite filtrar ciertos nombres de programas o componentes de la ruta de la línea de comandos. Aquí estamos viendo todos los procesos de 'Library / PrivateFrameworks' solo, por ejemplo.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |
Andreas
fuente
Recibo muchas fallas que dicen que vmmap no se pudo iniciar como un proceso de 32, pero que detiene xargs. Para obtener tarjetas para continuar, lo hice ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. Todavía no se detiene en ctrl + c, pero tampoco se detiene en errores de vmmap.
ShadSterling
0

Abra Activity Monitor en su carpeta / Aplicaciones / Utilidades y hay una columna de Memoria virtual que le dirá esto. Puede hacer clic en el encabezado de la Memoria virtual para ordenar por la aplicación más o menos utilizada. También asegúrese de cambiar Mis procesos a Todos los procesos, y tenga en cuenta que una aplicación podría tener múltiples procesos. Por ejemplo, la aplicación de terceros Little Snitch se compone de "Little Snitch Network Monitor" y "Little Snitch UIAgent".

ridogi
fuente
44
Eso está mal. El nubmer en la columna de memoria virtual es una suma de memoria actualmente en RAM y en archivos intercambiados, mapeados y no sé qué más.
Tadeusz A. Kadłubowski
¿Estás seguro? Apple no lo menciona support.apple.com/kb/TA20517
ridogi
1
El número de VM mide la cantidad asignada pero aún no utilizada. Los archivos de intercambio tendrán lo que realmente se usa.
Chealion
@Chealion: ¿cómo define la memoria que se asigna pero que en realidad no se usa?
Tadeusz A. Kadłubowski
@tkadlubo: En este caso, creo que es solo la discrepancia entre el tamaño de VM indicado disponible para un proceso y las páginas reales, paginado en el disco. No estoy seguro de cómo definirlo más allá de señalar que el número de VM y los archivos de intercambio en el disco son diferentes.
Chealion
0

Como dijo ridogi, abra el Monitor de actividad. Navegue hasta el proceso que desea inspeccionar y haga clic en ... ¡Inspeccionar! Luego haga clic en memoria; Esto le dirá cuánto intercambio está utilizando el proceso dado.

¡Que te diviertas!

trolle3000
fuente
3
La página de inspección me dice todo tipo de cosas interesantes que se correlacionan positivamente con cuál es la respuesta de la pregunta, como #pagefaults, #pageins y la lista de archivos mmapped, pero en ninguna parte la respuesta real a la pregunta que busco.
Charles Stewart