Un fenómeno común en mi uso diario (y varios otros según varias publicaciones en Internet) de OS X, el sistema parece volverse lento cada vez que no hay más memoria "libre" disponible. Supuestamente, esto se debe al intercambio, ya que la actividad de disco pesado es aparente y que vm_stat informa muchos pageouts. (Corrígeme del mal)
Sin embargo, la cantidad de RAM "inactiva" es típicamente alrededor del 12.5% -25% de toda la memoria disponible (^ 1.) Cuando el intercambio comienza / ocurre / finaliza.
De acuerdo con http://support.apple.com/kb/ht1342 :
Memoria inactiva
Esta información en la memoria no se usa activamente, pero se usó recientemente.
Por ejemplo, si ha estado usando Mail y luego lo cerró, la RAM que Mail estaba usando está marcada como Memoria inactiva. Esta memoria inactiva está disponible para su uso por otra aplicación, al igual que la memoria libre. Sin embargo, si abre Mail antes de que otra aplicación use su memoria Inactiva, Mail se abrirá más rápido porque su memoria Inactiva se convierte en Memoria activa, en lugar de cargar Correo desde el disco duro más lento.
Y de acuerdo con http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html :
La lista inactiva contiene páginas que actualmente residen en la memoria física pero a las que no se ha accedido recientemente. Estas páginas contienen datos válidos pero pueden liberarse de la memoria en cualquier momento .
Entonces, básicamente: cuando un programa se ha cerrado, su memoria se marca como Inactiva y debe poder reclamarse en cualquier momento. Aún así, OS X preferirá comenzar a cambiar la memoria al archivo Swap en lugar de reclamar esta memoria, siempre que la memoria "Libre" llegue a estar baja.
¿Por qué? ¿Cuál es la ventaja de este comportamiento sobre, por ejemplo, liberar instantáneamente memoria inactiva y ni siquiera tocar el archivo de intercambio? Algunas fuentes (^ 2.) Indican que OS X paginaría la memoria "Inactiva" para intercambiar antes de liberarla, pero eso no tiene sentido ahora ¿lo hace si la memoria se puede liberar de la memoria en cualquier momento ? El intercambio es costoso, la liberación es barata, ¿verdad?
¿Se puede cambiar este comportamiento usando alguna preferencia o un truco conocido? (Preferiblemente, uno que no incluya deshabilitar swap / dynamic_pager por completo y reiniciar ...)
Aprecio el comando de purga , así como el concepto de Reparar permisos de disco para forzar algo de memoria Libre, pero esas son formas de forzar dolorosamente más memoria Libre que en realidad arreglar la lógica de decisión de intercambio / liberación ...
Por cierto, se hizo una pregunta similar aquí: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ y aquí: http: //hintsforums.macworld .com / showthread.php? t = 87688 pero a pesar de que los OP volvieron a hacer la pregunta central, ninguna de las respuestas responde a una respuesta ...
^ 1. ACTUALIZACIÓN 17-mar-2012 Desde la primera vez que publiqué esta pregunta, pasé de 4 gb a 8 gb de ram instalado, y el problema persiste. La cantidad de ram "Inactivo" era 0.5gb-1.0gb antes y ahora es típicamente alrededor de 1.0-2.0GB cuando el intercambio comienza / ocurre / termina, es decir, parece que alrededor del 12.5% -25% del ram se conserva como Inactivo por osx lógica del núcleo
^ 2. Por ejemplo https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work- dia :
Una vez que se utiliza toda su memoria (la memoria libre es 0), el sistema operativo escribirá memoria inactiva en el archivo de intercambio para hacer más espacio en la memoria activa.
ACTUALIZACIÓN 17-mar-2012
Aquí hay un resumen de los métodos que se han sugerido para ayudar hasta ahora:
El comando de purga
"Se utiliza para aproximar las condiciones iniciales de arranque con una memoria caché de búfer de disco frío para el análisis de rendimiento. No afecta la memoria anónima que se ha asignado a través de malloc, vm_allocate, etc.".
Esto es útil para evitar que osx intercambie la memoria caché del disco (lo cual es ridículo que osx realmente lo haga en primer lugar), pero con la desventaja de que se libera la memoria caché del disco, lo que significa que si la memoria caché del disco no estaba por ser intercambiado, uno simplemente terminaría con un caché de búfer de disco frío, probablemente afectando negativamente el rendimiento
La aplicación FreeMemory y / o la reparación de permisos de disco para forzar algo de memoria libre
No ayuda a liberar memoria, solo mueve algunos gigabytes de contenido de memoria de RAM a HD. Al final, esto causa muchos intercambios cuando intento usar las aplicaciones que estaban abiertas mientras liberaba memoria, ya que gran parte de su VM ahora está en intercambio.
Acelerar la asignación de intercambio utilizando dynamicpagerwrapper
Parece algo bueno para acelerar el uso de intercambio, pero no aborda el problema del intercambio de osx en primer lugar mientras todavía hay memoria inactiva.
Deshabilitar el intercambio deshabilitando dynamicpager y reiniciando
Esto obligará a osx a no usar el intercambio al precio del sistema que se cuelga cuando se usa toda la memoria. No es una alternativa viable ...
Deshabilitar el intercambio utilizando un Dynamicpager hackeado
Similar a la desactivación de dynamicpager anterior, algunos extractos de los comentarios a la publicación del blog indican que esta no es una solución viable: "La memoria inactiva es alta como siempre". "cuando su sistema se está quedando sin memoria, todo el sistema operativo se bloquea ...", "si consume toda la memoria de la Mac, es probable que la máquina se bloquee"
En resumen, todavía no estoy al tanto de una forma de deshabilitar Mac OS X del uso de intercambio cuando todavía hay memoria "Inactiva". Si no es posible, tal vez al menos hay una explicación en alguna parte de por qué osx prefiere cambiar la memoria que se puede liberar de la memoria en cualquier momento .