¿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.
macos
mac
swap
virtual-memory
Charles Stewart
fuente
fuente
Respuestas:
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/vm
como 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_stat
en 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]
ypagestuff
.fuente
vmmap [pid]
ovmmap -pages [pid]
la respuesta para la segunda parte de su pregunta?El
vmmap PID
comando debería darle algunas estadísticas útiles en números sobre un proceso dado.fuente
Basado en las ideas publicadas aquí, creé esta pequeña línea de código:
que muestra la sección Resumen (3 líneas) de la salida de vmmap. Lo he usado
notifyd
en 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.
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
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.
fuente
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.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".
fuente
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!
fuente