OSX guarda cierta información en la RAM que ya no se usa, pero que se usó recientemente. Esto se llama memoria inactiva y tiene como objetivo mejorar la experiencia del usuario acelerando algunas acciones:
Por ejemplo, si ha estado usando Mail y luego lo cierra, la memoria RAM que Mail estaba usando se marca como memoria inactiva. La memoria inactiva está disponible para que la use otra aplicación, al igual que la memoria libre. Sin embargo, si abre Mail antes de que otra aplicación utilice su memoria inactiva, Mail se abrirá más rápido porque su memoria inactiva se convierte en memoria activa, en lugar de cargarla desde la unidad más lenta.
Suena cuestionable (¿cuánto puede acelerar el correo en una máquina de cuatro núcleos?), pero al menos eso no podría doler , ya que dicha memoria puede tratarse como memoria libre. En realidad, puede :
En OS X, cuando el número de páginas en la lista libre cae por debajo de un umbral calculado, el kernel reclama páginas físicas para la lista libre intercambiando páginas inactivas fuera de la memoria.
Esto me hace preguntarme si el manejo de la memoria de OSX es realmente superior; después de todo la misma página menciona que
La paginación de cualquier tipo... afecta negativamente al rendimiento porque obliga al sistema a pasar mucho tiempo leyendo y escribiendo en el disco. Leer una página desde el almacén de respaldo lleva mucho tiempo y es mucho más lento que leer directamente desde la RAM. Si el sistema tiene que escribir una página en el disco antes de poder leer otra página del disco, el impacto en el rendimiento es aún peor.
Es probable que esto (paginación de la memoria inactiva y la subsiguiente degradación grave del rendimiento) ocurra incluso durante tareas triviales como la exploración de múltiples pestañas, incluso si la cantidad de pestañas abiertas simultáneamente se mantiene dentro de lo razonable (tanto Safari como Chrome parecen ser culpables de agregando a la memoria inactiva cada vez que se cierra una pestaña).
La máquina se vuelve difícilmente utilizable cuando esto sucede; incluso abrir la Terminal y purgar la memoria puede llevar unos minutos.
¿Se puede desactivar el intercambio de memoria inactiva? O, dado que la memoria inactiva no es esencial, ¿se puede desactivar por completo?
Alternativamente, ¿hay disponible un demonio o una aplicación preferiblemente de Apple que monitoree el uso de memoria inactiva (un oxímoron de OSX) y cuando supera una cantidad arbitraria (¿medio concierto?) purge
se realiza una?
He estado investigando esta misma pregunta durante algún tiempo y he llegado a la conclusión de que, si bien se ofrecen varias supuestas "soluciones" en varios lugares, ninguna de ellas soluciona realmente el problema o hace que los síntomas desaparezcan. Lo mejor que he encontrado son técnicas que cambian cuando se intercambia la memoria inactiva, como el uso del purge
comando al que se refirió. Creo que MacLemon tiene razón en que el intercambio se puede deshabilitar solo en su totalidad y no de forma selectiva, por lo que deshabilitar el intercambio de memoria inactiva en la práctica sería equivalente a deshabilitar la memoria virtual por completo, lo que podría ser una solución viable en una máquina con cantidades realmente grandes. de RAM, pero no es práctico en máquinas con una capacidad de RAM máxima baja, como MacBooks o Minis.
La razón por la que ninguna de las soluciones de purga ad-hoc mejora significativamente la situación es que en realidad solo hay dos formas de obligar a OS X a borrar la memoria inactiva: el purge
comando o forzar la asignación de toda la memoria libre (y dado que no estoy seguro de qué método purge
usa, estos dos pueden ser más o menos iguales).purge
, como mencionaste, toma una cantidad de tiempo no trivial para completarse. La asignación de toda la memoria libre simplemente acelera el proceso mediante el cual el contenido de la memoria inactiva se intercambiaría de forma natural y, por lo tanto, aún consume la misma gran cantidad de recursos del sistema. La única ventaja de cualquiera de estas soluciones es que le permiten elegir cuándo se produce el intercambio, por lo que puede realizarse antes de que normalmente intente asignar esa memoria a otra cosa. Si eso es realmente útil para usted depende de varios factores, por lo que la forma más sencilla de averiguarlo es probarlo.
He estado probando algunas de las utilidades de borrado de memoria que existen y descubrí que, para mí, forzar manualmente el intercambio inactivo requiere una supervisión más activa de los niveles de memoria de lo que es práctico mientras estoy trabajando y usando una utilidad. que fuerza automáticamente el intercambio cuando la memoria libre cae por debajo de un cierto umbral no es mejor que dejar que el sistema operativo lo haga solo, ya que todavía no tengo control sobre cuándo ocurrirá el intercambio y mis aplicaciones tendrán SPOD. Entonces, si bien hay una aplicación que hará exactamente lo que pide su pregunta alternativa, eso en realidad no hace que la situación sea menos dolorosa.
Hasta que el equipo de desarrollo del sistema operativo de Apple decida que el sistema de administración de memoria no está funcionando como se supone que debe hacerlo y encuentren una manera de hacerlo funcionar correctamente, la única solución real es identificar qué aplicaciones están generando la mayor cantidad de memoria inactiva y detenerse. utilizarlos. En mi situación, esto ha significado cambiar de navegador web. He estado probando una variedad de ellos, y Chrome es hasta ahora el que parece generar la menor cantidad de memoria inactiva, probablemente en parte porque cada pestaña y cada extensión se ejecutan como un proceso separado, lo que permite que la administración de memoria nativa del sistema operativo trate cada uno. uno por separado en términos de priorizar el intercambio. Safari es lo peor que he probado; Comenzando con Safari 5.1, podía abrir algunas pestañas, no hacer absolutamente nada y ver cómo la memoria inactiva aumentaba rápidamente en el Monitor de actividad; pasaría fácilmente de < 1 gb inactivo a > 3 gb inactivo dentro de unos cinco minutos, ejecute el ciclo de intercambio y luego haga exactamente lo mismo. (De acuerdo, la memoria que no hace nada es exactamente lo que la hace inactiva en primer lugar, pero no debería crear más memoria inactiva de la que se asignó activa en primer lugar). Safari 6 bajo Mountain Lion es un poco mejor, pero no lo suficientemente mejor como para que valga la pena cambiar de nuevo. Firefox, al no estar basado en WebKit, debería ser mejor en esto que Safari o Chrome, pero tiene su propio legado de problemas de administración de memoria, incluido un historial de fugas de memoria, que no lo hacen mejor en la práctica. t crea más memoria inactiva de la que se asignó activa en primer lugar). Safari 6 bajo Mountain Lion es un poco mejor, pero no lo suficiente como para que valga la pena volver. Firefox, al no estar basado en WebKit, debería ser mejor en esto que Safari o Chrome, pero tiene su propio legado de problemas de administración de memoria, incluido un historial de fugas de memoria, que no lo hacen mejor en la práctica. t crea más memoria inactiva de la que se asignó activa en primer lugar). Safari 6 bajo Mountain Lion es un poco mejor, pero no lo suficiente como para que valga la pena volver. Firefox, al no estar basado en WebKit, debería ser mejor en esto que Safari o Chrome, pero tiene su propio legado de problemas de administración de memoria, incluido un historial de fugas de memoria, que no lo hacen mejor en la práctica.
Lo que realmente solucionaría el problema es si hubiera una opción, probablemente una opción oculta en el sistema operativo, que le indicara al sistema operativo que simplemente descargue el contenido de la memoria inactiva cuando sea necesario en lugar de intercambiar su contenido en el disco. Pero no espero que Apple alguna vez haga disponible esa opción.
¿Cuánta RAM tiene tu Mac? Además, se sabe que los navegadores (especialmente los de Webkit) usan grandes cantidades de memoria en estos días. La memoria inactiva se utiliza bien en lugar de la RAM libre, que simplemente se queda allí consumiendo energía. En el caso de un navegador, esto le permite deshacer el cierre de una pestaña y aún así conservar su historial, etc.
Puede deshabilitar completamente el intercambio de memoria ejecutando sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
y reiniciando. No puede deshabilitar selectivamente el intercambio.
Puede deshacer esto ejecutando sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
y reiniciando nuevamente.
Esta pregunta se hizo en 2012 y esta respuesta se escribió en 2020, y algunas cosas han cambiado mientras tanto, pero mucho sigue igual.
Creo que la mayor parte de esta pregunta, la respuesta de Quantumpanda y la descripción del artículo de soporte de Apple sufren de un malentendido de la naturaleza de la "memoria inactiva". El OP apunta a la documentación de Apple que dice
En OS X, cuando el número de páginas en la lista libre cae por debajo de un umbral calculado, el kernel reclama páginas físicas para la lista libre intercambiando páginas inactivas fuera de la memoria.
La documentación de Apple decía eso en 2012 y todavía dice eso en 2020. Sin embargo, esa cita proviene de la sección "Proceso de salida de página" de la documentación; el OP se perdió la discusión de " Listas de páginas en el Kernel ". La oración clave (para nuestros propósitos actuales) en esa sección es
Si una página inactiva no se ha modificado y no es residente permanente (cableada), se roba (cualquier asignación virtual actual se destruye) y se agrega a la lista libre.
Por ejemplo, si ha estado usando Mail y luego lo cierra, la memoria RAM que Mail estaba usando se marca como memoria inactiva. La memoria inactiva está disponible para que la use otra aplicación, al igual que la memoria libre. Sin embargo, si abre Mail antes de que otra aplicación utilice su memoria inactiva, Mail se abrirá más rápido porque su memoria inactiva se convierte en memoria activa, en lugar de cargarla desde la unidad más lenta.
Para ejecutar un programa, Mail en este ejemplo, el código de ese programa se lee desde el disco y se escribe en la RAM, porque la CPU solo puede ejecutar código desde la RAM. El sistema operativo realiza un seguimiento del hecho de que la RAM es una copia de un archivo en el disco y realiza un seguimiento de si esos datos en la RAM se han modificado o no. Cuando se cierra el programa de Correo, la copia RAM del archivo ya no es necesaria y termina en la lista "inactiva". Sin embargo, si hay suficiente RAM para todos, no hay necesidad de destruir los datos en la RAM, por lo que se deja como está.
Ahora, si vuelve a ejecutar el programa de inmediato, el sistema operativo no tiene que copiar el código del disco a la RAM porque puede ver, mirando la lista inactiva, que ya tiene una copia del archivo en la RAM, por lo que simplemente mueve esa memoria RAM a la lista activa y la asigna al nuevo programa de correo en ejecución. Esto es mucho más rápido que volver a leer el archivo desde el disco.
Sin embargo, el correo es un mal ejemplo, porque no se detiene e inicia con frecuencia el programa de correo. Sin embargo, hay docenas de pequeños programas que el sistema operativo ejecuta en segundo plano, como para mantener actualizados los índices de Spotlight o mantener sus datos locales sincronizados con iCloud, que se ejecutan con frecuencia y luego se cierran cuando terminan. Para estos programas el ahorro de tiempo es mucho más significativo.
Este tipo de memoria, que está respaldada por un archivo en el disco y no se modifica, nunca se escribe para intercambiar , porque ya hay una copia en el disco en otro lugar. Este es el tipo de memoria mencionado en la cita añadida anterior: "no se ha modificado y no es residente permanente". Cuando no hay suficiente memoria, este tipo de memoria inactiva no se intercambia, se roba y se coloca directamente en la lista libre.
La otra forma en que la memoria se vuelve inactiva es si una aplicación no la ha tocado (leído o escrito) en un tiempo. Por ejemplo, si está trabajando en un procesador de texto y tiene varios archivos abiertos, esta podría ser información sobre uno de los archivos que tiene abiertos pero en los que no está trabajando. Cuando la memoria se agota, este tipo de memoria se intercambia en el disco para dejar espacio para lo que sea que esté solicitando la memoria que necesita en este momento y que está provocando que la memoria se agote.
Este tipo de memoria inactiva debe cambiarse porque contiene datos que no se guardan en ningún otro lugar. La única forma de evitar que se intercambie este tipo de memoria es deshabilitar el intercambio por completo, y casi siempre es una mala elección. Cuando deshabilita el intercambio por completo, reduce significativamente la capacidad del sistema. Si limitó el sistema a ejecutar solo lo que podría ejecutar con el intercambio deshabilitado, funcionaría igual de bien con el intercambio habilitado.
purge
es una pista falsaEl purge
programa es una pista falsa contraproducente. Obligará a que la memoria inactiva que sería robada en lugar de ser intercambiada sea robada de inmediato. Eso puede parecer bueno para los números, pero en realidad perjudica el rendimiento de dos maneras:
purge
programa
Pedro
Oleg
Pedro
graham perrin
Oleg