Pensé que entendía cómo MacOSX administra la memoria, pero recientemente me quedé desconcertado por su rendimiento. Aquí está la situación:
- Tengo un nuevo sistema Core i7 con 8 GB de memoria física con MacOSX 10.6.7. Hay algunas aplicaciones que se ejecutan regularmente y que ocupan parte de la memoria: Safari, Mail, Xcode, Terminal, etc.
- Necesito ejecutar tres procesos de 64 bits en paralelo, cada uno de los cuales usa aproximadamente 2000M de memoria real.
- Aunque la memoria cableada se mantiene 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 malo de los tres procesos intensivos en memoria que lancé.
- 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 memoria del sistema?
macos
memory
virtual-memory
Ventzi Zhechev
fuente
fuente
Respuestas:
He descubierto, en mi máquina, que Mac OS X es un poco lento para localizar las cosas correctas.
Cada vez que haga algo particularmente hambriento de memoria, a menudo cerraré algunas aplicaciones para ayudarlo. Safari es un gran consumidor de memoria si se ha estado ejecutando durante un tiempo y es el primero de la lista de aplicaciones para cerrar. En mi caso, esto fue cuando traté de ejecutar VMWare Fusion sin suficiente RAM real.
Probablemente lo sepas, 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 actualmente residen 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 una memoria caché del sistema de archivos, así como la memoria inactiva real.
La memoria inactiva es probablemente una cosa difícil de manejar en un sistema operativo interactivo guiado por GUI donde 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 eso es que En una situación como la suya, el sistema operativo no sabe exactamente qué es lo que hay que hacer.
Es posible purgar (algunos de) la memoria inactiva mediante el comando de purga . Es posible que sea necesario instalarlo instalando las herramientas CHUD, pero es posible que ya lo tenga instalado. No he intentado usar el comando de purga, así que YMMV ...
He divagado un poco y puede que haya respondido o no a tu pregunta. Después de escribir todo esto, encontré otra pregunta en este sitio que tiene mucha de la misma información que también podría ayudar.
fuente
purge
comando es exactamente lo que estaba buscando. Encontré los artículos de soporte en el KB de Apple, pero no fueron particularmente útiles.MacOS hace liberar la memoria inactiva, pero sólo si realmente necesita. Esa "memoria inactiva" en realidad puede ser una memoria que el núcleo cree que es un candidato para paginación, pero aún no se ha decidido, en espera de que pase más tiempo sin que se haga referencia a la memoria inactiva (en cambio, se está centrando en paginar la memoria 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 ser leídas desde el disco antes de que su programa pueda continuar la ejecución).
purge
es útil para que los desarrolladores simulen las condiciones de inicio de una aplicación, por ejemplo, para ver cuánto tiempo lleva ejecutar una aplicación la primera vez después de un arranque o una pausa larga. Para el usuario típico,purge
no es muy útil (y en realidad causará una degradación temporal del rendimiento).fuente