¿Por qué OS X usa el intercambio cuando hay mucha "memoria inactiva"?

22

Estoy usando OS X desde hace unos meses (Lion y ahora Mountain Lion). Tengo 8 GB en mi mini y casi a diario ahora se acerca a eso. En una máquina con Windows 7 con 8 GB, nunca tuve ese tipo de problema. De todos modos, leí en la red que la memoria inactiva es la memoria caché de la aplicación de los programas que se cerraron recientemente y se puede usar para una reapertura más rápida. Y esta memoria inactiva se puede liberar a una nueva aplicación si es necesario. No es lanzado. En cambio, OS X comienza a intercambiarse. Entonces, mi pregunta es ¿por qué OS X usa el intercambio cuando hay mucha "memoria inactiva"? Aquí una pantalla que muestra lo que quiero decir:

ingrese la descripción de la imagen aquí

Realmente espero que haya una alternativa para hacer que OS X use esos 2.69 GB antes de comenzar a intercambiar. Realmente lo hago.

Balchev
fuente
Sí, es extraño ¿Es una aplicación que ocupa toda la RAM? Quizás OSX limita las aplicaciones para que no usen más del 80% de RAM a la vez. Sin embargo, inactivo no significa que es gratis. Está reservado para algo.
Piotr Kula
No, muchas aplicaciones, navegadores, Eclipse, etc. De lo que leí es gratis, ya que es un caché de aplicaciones recientemente cerrado. Debería haber forma de hacer que OS X no se intercambie cuando hay memoria inactiva
Balchev
Puedo reproducirlo en cualquier momento y puedo hacer una pantalla del monitor de actividad si es necesario
Balchev
2
La memoria inactiva no es memoria libre.
kinokijuf
2
@kinokijuf, sin embargo, debería actuar como memoria libre cuando no quede memoria libre. Si la memoria inactiva siempre se cambia al disco de todos modos, no tiene sentido hacer la distinción activo - inactivo.
Pieter

Respuestas:

18

El intercambio aparentemente ocurrió cuando las páginas RAM inactivas estaban realmente activas.

( Actualización: como se aclaró en un comentario, este no es su caso. Por lo tanto, las personas con el mismo problema pueden pasar a la regla horizontal ).

Es decir, tenía muchos programas ejecutándose y el núcleo intercambió algunas páginas. Luego dejaste algunos programas. El núcleo marca sus páginas RAM como inactivas. Pero no cambiará las páginas a la RAM hasta que se necesiten estas páginas. Esto da como resultado tener páginas inactivas e intercambiadas.

¿Por qué no intercambiar páginas de forma preventiva? Porque eso sería apostar contra viento y marea: a la larga pierdes. Pensemos en un ejemplo simplificado: dos programas A y B que no caben en la RAM al mismo tiempo. El programa A todavía se está ejecutando y todas las páginas intercambiadas pertenecen a A. El programa B se ha cerrado y todas las páginas inactivas pertenecen a B.

Si el kernel intercambia de manera preventiva las páginas de A e inmediatamente después:

  • el programa A necesita acceder a sus páginas -> Usted gana - las páginas ya están en la RAM.
  • vuelve a iniciar B -> Pierdes - "pagaste" el costo de llevar las páginas a la RAM y ahora tienes que enviarlas de vuelta.
  • inicias otro programa C -> Pierdes si A y C no caben en la RAM al mismo tiempo. Si encajan, eres par.

También tenga en cuenta que el intercambio (escritura en disco) es más costoso que el intercambio (lectura desde disco). Lo que hace que esta "apuesta" sea aún más poco activa.

En resumen: confíe en su núcleo y no intente burlarlo.


Actualización: Resulta que la memoria inactiva no funciona ya que el uso del Monitor de actividad para leer el artículo de Memoria del sistema ha llevado a muchas personas a creer que funciona. La definición dada en el artículo para memoria inactiva es correcta:

Esta información está en la RAM pero no se usa activamente, se usó recientemente.

Pero el siguiente ejemplo es totalmente engañoso y demasiado simplificado (como mi ejemplo para ser franco):

Por ejemplo, si ha estado usando Mail y luego lo cerró, la RAM que estaba usando Mail está marcada como Memoria inactiva. La 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 su memoria inactiva sea utilizada por otra aplicación, 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.

Busqué más recursos en línea y terminé en este hilo en la lista de correo del núcleo de Darwin, que es bastante informativo. Citando a Jim Magee (del equipo de Darwin, creo):

En resumen, el sistema VM del núcleo cuando se trata con la presión de la memoria escanea las páginas en uso e intenta mantenerlas en un equilibrio entre las marcas activas e inactivas. Las páginas inactivas se escanean para su reutilización mientras están marcadas como inactivas. Si se han reutilizado, se marcan como activas y alguna otra página debe pasar del estado activo al inactivo para detectar si está en uso activo. Entonces, inactivo es un nombre inapropiado. Es la abreviatura de "posiblemente inactivo, intentemos verificar eso".

Como descubrió, el equilibrio interno que (actualmente) buscamos es de aproximadamente 2/3 activo frente a 1/3 inactivo ...

Esto explica el comportamiento que observas. Es decir, las páginas inactivas que ve pertenecen a programas en ejecución que no se han utilizado recientemente. Entonces, cuando enciende un nuevo programa, las páginas inactivas se intercambian. Al mismo tiempo, las páginas de otros programas se marcan como inactivas para mantener la relación 2/1 de activo frente a inactivo.

El hilo también contiene algunas sugerencias para aprender más sobre las partes internas de darwin. También hay algunas sugerencias en caso de que haya comenzado a investigar el uso de la memoria debido a problemas de beachball (que generalmente tienen poco que ver con eso).

La conclusión sigue siendo la misma: confíe en su núcleo y no intente burlarlo. :-)

m000
fuente
1
Hola, no estoy seguro de que me entiendas. Estoy hablando por el momento cuando tienes como 100-200 MB de memoria libre, 2.6 GB "inactivo" e inicias otro programa, digamos eclipse, xcode, etc. Lo que sucede es que no usa esos 2.6 GB y, en cambio, cambiar de la memoria activa. No estoy seguro si entiendes lo que quiero decir. De todos modos, gracias por tu respuesta
Balchev
Esto está claro ahora. Tal vez deberías agregar el ejemplo en este comentario a tu pregunta. He agregado información adicional que creo que proporciona una explicación adecuada de lo que observa.
m000
No estoy seguro si editaré mi respuesta original. Explica un caso diferente (ya que no recibí su pregunta justo antes de su comentario) y puede confundir a las personas.
m000
Entonces, como dice Radoo en su comentario, "OS X es una bestia hambrienta". No esperaba que OS X tuviera tanta memoria (tanto Lion como ahora Mountain Lion) y es por eso que pensé que hay algo sospechoso aquí. Gracias por su respuesta actualizada.
Balchev
6

Puede deshabilitar la paginación de forma segura si tiene suficiente ram.

Prueba estos comandos.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Luego reinicie y verifique que el proceso dynamic_pager ya no se esté ejecutando.

Asegúrese de que no se hayan creado archivos de intercambio /private/var/vm/.

Para volver a habilitar intente los siguientes comandos:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

También puede deshabilitar Spotlight para liberar más RAM y reducir la actividad del disco. Los siguientes comandos se usan para deshabilitar y habilitar Spotlight.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
arundevma
fuente
Leí en la red que deshabilitar el intercambio en OSX puede provocar un comportamiento inesperado del sistema y fallas. ¿Es esto cierto?
Balchev
Cuando tenga poca memoria, lo hará. Pero si tiene suficiente memoria, como 8 Gb, no causará ningún problema.
arundevma
2
"Suficiente memoria, como 8 Gb" - lo siento, eso es tan lindo ... :)
Bombe
0

No hay mucho que puedas hacer. ¿Por qué hace eso? Porque así es como funciona OS X. La parte interesante es cómo la memoria ocupada se hace más grande con cada sueño que obtiene la Mac.

Qué puedes hacer:

  1. Actualizar RAM.
  2. Ejecute el comando sagrado de " purga " para limpiar la mayor parte de la memoria inactiva, siempre que sea necesario.
  3. Deshabilite el intercambio http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

fuente
Hola, utilicé el comando de purga, pero la mayoría de las veces liberaba menos de la mitad de la memoria "inactiva". Leí que deshabilitar el intercambio en OSX puede conducir a un comportamiento inesperado del sistema y se bloquea. Así que elegí 1) Ahora está bien con 16 gb :) Solo esa cantidad de memoria es para servidores, no para escritorios :) Gracias por tu respuesta
Balchev
Tengo 16 GB en mi Macbook pro, eso no es un servidor. :) Es bien sabido que OS X es una bestia hambrienta cuando se trata de memoria, especialmente cuando se usan múltiples aplicaciones medianas / grandes al mismo tiempo. Logré llenar todos esos 16GB sin abrir ningún software de edición de imagen / video, solo algunos juegos y pequeñas aplicaciones. La memoria inactiva era de aproximadamente 4 GB ...
También debe tener en cuenta que muchas de las aplicaciones de OS X ya son de 64 bits. Las aplicaciones de 64 bits asignan más memoria que las aplicaciones de 32 bits, debido a que el espacio de direccionamiento se hace más grande.
0

El sistema funciona según lo diseñado. Incluso cuando no hay presión de memoria, puede tener sentido escribir algunas páginas que no se pueden descartar pero que no se han utilizado recientemente para intercambiar cuando el sistema no está ocupado. De esa manera, si hay presión de memoria más tarde, estas páginas pueden ser expulsadas de la RAM sin tener que escribirlas primero para intercambiarlas mientras el sistema está ocupado.

David Schwartz
fuente
1
Está mal diseñado entonces. es demasiado agresivo en la asignación y uso del espacio de intercambio.
mendota
¿Por qué eso importa? Si hay muchos intercambios gratuitos, asignar espacio de intercambio es inofensivo. Esto es especialmente cierto cuando el intercambio no contiene los datos necesarios porque eliminar las asignaciones no tiene costo. Este es un buen diseño: hacer un trabajo duro cuando es casi sin costo en lugar de diferirlo más tarde cuando el sistema está bajo presión.
David Schwartz
2
es un mal diseño cuando es demasiado agresivo y provoca tartamudeos o bloqueos en los programas que erróneamente etiqueta como inactivos y comienza a cambiar. mientras tanto, hay otros ocho conciertos gratis en RAM: /
mendota
Estoy de acuerdo con mendota. Una vez que desactivé completamente el intercambio, mi sistema funciona sin problemas y sin tartamudeo.
Anton Kuzmin
@AntonKuzmin Eso realmente no tiene nada que ver con lo que trata esta pregunta. Si lees esta pregunta, no dice nada acerca de la tartamudez ni de ningún problema.
David Schwartz