Problemas para comprender la memoria inactiva en MacOSX

Pensé que entendía cómo MacOSX administra la memoria, pero recientemente me desconcertó su rendimiento. Aquí está la situación:

  1. Tengo un nuevo sistema Core i7 con 8 GB de memoria física que ejecuta MacOSX 10.6.7. Hay algunas aplicaciones que se ejecutan regularmente y ocupan parte de la memoria: Safari, Mail, Xcode, Terminal, etc.
  2. Necesito ejecutar tres procesos de 64 bits en paralelo, cada uno de los cuales usa alrededor de 2000 MB de memoria real.
  3. Aunque la memoria cableada permanece por debajo de 1000M (es decir, tengo más de 7000M disponibles para procesos), veo una gran actividad de paginación que conduce a un rendimiento muy bajo de los tres procesos de uso intensivo de memoria que inicié.
  4. Aparentemente, no me estoy quedando sin RAM disponible, ya que la memoria inactiva informada se mantiene alrededor de 2500M y la memoria activa no supera los 5000M.

¿Alguien puede darme una pista de por qué MacOSX no libera la memoria inactiva para los procesos que la necesitan, sino que recurre a la paginación? Además, ¿hay alguna forma adecuada de influir en la gestión de la memoria por parte del sistema?

Respuestas (2)

Descubrí, en mi máquina, que Mac OS X es un poco lento para buscar las cosas correctas.

Cada vez que hago algo particularmente hambriento de memoria, a menudo salgo de algunas aplicaciones para ayudar. Safari es un gran consumidor de memoria si se ha estado ejecutando durante un tiempo y está en la parte superior de la lista de aplicaciones para cerrar. En mi caso, esto fue cuando traté de ejecutar VMWare Fusion sin suficiente RAM real.

Probablemente sepa esto, pero aquí hay un par de enlaces a la documentación de Apple que describen el uso de la memoria y la memoria virtual en OS X:

http://support.apple.com/kb/ht1342

http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html

Aquí está la explicación que se da: La lista inactiva contiene páginas que residen actualmente en la memoria física pero a las que no se ha accedido recientemente. Es difícil obtener una definición exacta de lo que esto significa, pero parece incluir un caché del sistema de archivos, así como una memoria inactiva real.

La memoria inactiva es probablemente algo difícil de manejar en un sistema operativo controlado por GUI interactivo en el que un usuario puede elegir cambiar a cualquier aplicación en ejecución en cualquier momento y proporcionar capacidad de respuesta en este tipo de situación es importante... pero la otra cara de esto es que en una situación como la suya, el sistema operativo no sabe muy bien qué es lo correcto.

Es posible purgar (parte de) la memoria inactiva usando el comando de purga . Es posible que deba instalarse instalando las herramientas CHUD, pero es posible que ya las tenga instaladas. No he intentado usar el comando de purga, así que YMMV ...

He divagado un poco y puede o no haber respondido a su pregunta. Después de escribir todo esto, encontré otra pregunta en este sitio que contiene gran parte de la misma información que también podría ayudar.

¡Gracias! El purgecomando es exactamente lo que estaba buscando. Encontré los artículos de soporte en la KB de Apple, pero no fueron particularmente útiles.

MacOS libera la memoria inactiva, pero solo si realmente es necesario . Esa "memoria inactiva" en realidad puede ser una memoria que el núcleo cree que es candidata para la paginación, pero aún no se ha decidido, a la espera de que pase más tiempo sin que se haga referencia a la memoria inactiva (en cambio, se está enfocando en la paginación de la memoria que realmente es menos probable que se vuelva a usar pronto). En tal caso, "purgar" la memoria inactiva en realidad hará que su rendimiento se vea afectado (ya que esas páginas de uso frecuente tendrían que volver a leerse desde el disco antes de que su programa pueda continuar la ejecución).

purgees útil para que los desarrolladores simulen las condiciones de inicio de una aplicación; por ejemplo, para ver cuánto tarda en ejecutarse una aplicación por primera vez después de un arranque o una pausa prolongada. Para el usuario típico, purgeno es muy útil (y en realidad provocará una degradación temporal del rendimiento).