¿No es la memoria inactiva un desperdicio de recursos?

87

Estoy buscando una explicación del uso de memoria en mi máquina, especialmente a la luz del ejemplo en esta captura de pantalla a continuación:

Uso de memoria

Entiendo lo que es Freey Activesignifica
Pero, ¿cuáles son los significados de Wiredy Inactive?

Especialmente inactive, ¿por qué usa tanta memoria para algo que no usamos?

GusDeCooL
fuente

Respuestas:

142

La memoria inactiva tuvo un rap horrible debido a un nombre horrible. Debería haberse llamado algo así como memoria "haz que tu Mac sea realmente rápida la segunda, tercera y cuarta vez que hace la misma tarea", excepto que también es un nombre horrible.

Apple reescribió el monitor de actividad cuando introdujo varias características nuevas y agregó memoria comprimida, por lo que parte de esto ya no se aplica a macOS que no muestran "Memoria inactiva", pero esto todavía se aplica a la administración de memoria de Mac OS X como se documenta en este documento. versión de Activity Monitor: https://support.apple.com/en-us/HT201538

Así es como le expliqué cosas a alguien nuevo en el concepto de memoria virtual en OS X:

  • Cableado : el sistema no puede ejecutarse sin esta cantidad de RAM (nunca intercambiado)
  • Activo: los programas realmente están usando esta memoria ahora o en los últimos segundos
  • Inactivo: Cosas que los programas han leído desde el disco lento o en otro lugar y que nunca más necesitarán. Los ingenieros lo saben mejor, volverá a Facebook en unos minutos o volverá a iniciar Word después de abandonarlo. Lo mismo sucede una y otra vez en las computadoras.
  • Gratis: RAM totalmente desperdiciada : el sistema solo necesita uno o dos MB libres para cubrir las solicitudes de asignación a corto plazo. Para las asignaciones más grandes, simplemente usa parte de la RAM inactiva asignándola a activa / cableada y eliminando la información sobre lo que solía contener.

El problema surge cuando Free + Inactive es menos de aproximadamente 1/3 del total y las cosas realmente pueden ponerse lentas.

La memoria inactiva es la velocidad extra / RAM de doble servicio. Sirve de forma gratuita en cualquier momento, pero también hace que las tareas repetidas sean mucho, mucho más rápidas si el sistema adivinó correctamente y mantuvo algo en la RAM que volverá a hacer. Es más rápido que la memoria intercambiada, ya que está cargada en RAM y acelera las cosas cuando el sistema de memoria virtual hace buenas suposiciones.

Cuando se pregunta si la RAM es un problema, en lugar de mirar cada una de las 4 categorías (5 si cuenta el intercambio activo), puede acoplar W + A como ralentizar un nuevo programa / tarea y F + I como acelerar un nuevo programa / tarea. Cuantos más F + I tenga, más programas nuevos podrá iniciar antes de que la RAM necesite confiar en el intercambio para hacer malabares con la memoria asignada.

Realmente no necesita saber cómo funciona el intercambio, ya que lo mencioné anteriormente. Básicamente, cuando un programa está inactivo y no se ha utilizado durante días (u horas), el sistema escribirá esa RAM en el disco duro en lugar de matar el programa. Esto permite que el sistema baraje y maneje todo tipo de cosas relacionadas con la administración de memoria y evita que cada programa necesite hablar entre ellos para acordar quién usará menos memoria cuando el sistema se agote.

Aquí hay un ejemplo del mundo real de cómo se usa la RAM inactiva.

  1. Salga de todas las aplicaciones y asegúrese de que las dos aplicaciones que estamos probando no estén configuradas para iniciarse automáticamente cuando inicie sesión
  2. Reinicia tu Mac
  3. Encienda su Monitor de actividad y observe la RAM en todo momento
  4. Mida el tiempo que tarda en iniciar la aplicación A (MS Word sería una buena opción)
  5. Salir de A
  6. Calcula el tiempo que lleva iniciar la aplicación B (Adobe algo también sería bueno)
  7. Salir de B
  8. Mida el tiempo que dura el segundo lanzamiento de A
  9. Salir de A
  10. Segundo lanzamiento del tiempo B.
  11. El tiempo A comienza la tercera vez con B corriendo.

Debería ver aceleraciones dramáticas para el segundo / tercer lanzamiento a medida que el sistema aprende a mantener en RAM inactiva las cosas que estas dos aplicaciones necesitan para ejecutarse.


En su caso, el total de Wired y Active significa que es probable que se produzca un intercambio en el disco y que su Mac no sea tan rápida como podría ser, ya que su RAM inactiva no es lo suficientemente grande como para almacenar todas las cosas que podría necesitar para reutilizar . Si tiene una unidad SSD rápida, esta asignación de RAM está bien y, en lugar de comenzar a disminuir una vez que menos de la mitad de su RAM es F + I, puede reducir las cosas más cerca de 1/4 de la RAM total para F + I antes de ver notable lentitud. Estas pautas son generales, y querrá ver vm_stat 15un intervalo similar para garantizar que el intercambio continuo y de volumen medio no haga que su Mac sea lenta.

bmike
fuente
99
Wow respuesta muy completa para los recién llegados como yo. Muchas gracias, muy apreciado :)
GusDeCooL
66
Sí, puedo responder para todos, de una vez por todas, la gente puede editarlo para mejorarlo y usted obtiene su respuesta. Muy buena idea para un sitio web donde la gente puede venir y hacer preguntas interesantes. :-)
bmike
3
¡Guauu! Hermosa respuesta!
duci9y
3
Desearía que lo explicaran así en mi clase de sistema operativo.
styfle
2
La purga de @cvsguimaraes no es instantánea; chat.stackexchange.com/transcript/message/12107920#12107920
Graham Perrin
6

El número que es más importante para determinar si su Mac está 'estresada' en la memoria es la cifra de 'Salidas de página'. En el Monitor de actividad en Mavericks esto ya no se muestra, ahora muestran la información en 'Intercambio utilizado:'.

Page outs significa que el sistema operativo ha determinado que no hay suficiente RAM disponible para ejecutar todas las aplicaciones y procesos que se han solicitado. Entonces, lo que hace es 'páginas' en las partes del disco de la memoria que determina que no se están utilizando activamente. Esto significa que la memoria RAM (rápida) se cambia a memoria HDD (lenta). Si esto sucede mucho porque hay muchas aplicaciones ejecutándose y el usuario va de una aplicación a otra, habrá muchas salidas de página e inscripciones de página.

Si ve que las salidas de página aumentan, entonces debe tomar medidas.

FromOZ
fuente
4

El problema en mi Mac es que la memoria "inactiva" nunca parece purgarse a menos que haga una purga manual en la ventana de comandos. Se acumula y se acumula hasta que aparece una ventana emergente que me dice que elimine las aplicaciones. Incluso después de eliminar todas mis aplicaciones, todavía tengo demasiada memoria inactiva para ejecutar cualquier cosa. Entonces, en mi Mac que ejecuta la última versión de Mountain Lion NO es cierto que la memoria inactiva se recupere cuando la memoria libre se agote. O tengo una aplicación en algún lugar que ha bloqueado una porción de memoria inactiva que nunca se libera, o el iOS tiene un error. (Tengo 8 GB de memoria física ... ¡eso debería ser suficiente!)

Ernie
fuente
2
Estoy contigo, Ernie ... en Mac OS 10.6 y 10.7 en un MacBook Pro y Mac Pro, la memoria inactiva se arrastrará y el sistema operativo comenzará a intercambiarse (de acuerdo con "Page Ins" y "Page Outs") y El sistema se detendrá. La memoria inactiva parece nunca recuperarse. Tengo que usar "purga" para recuperar la memoria inactiva y volver a activar mi sistema.
Eric
2
¿De dónde viene esta ventana emergente? ¿Cuál es la situación de la memoria según lo informado vm_statcuando sucede? ¿Qué te hace estar tan seguro de que puede haber "demasiada" memoria inactiva "para ejecutar algo"? En lo que a mí respecta, todo esto es un rumor que no tiene respaldo en el código que sabes, en realidad se ejecuta en el kernel.
Kuba Ober
2
¿Su asignación de memoria se parece a lo que ha presentado Gus? Aquí estamos hablando de un gigabyte cableado y un gigabyte y medio activo. La ración inactiva / libre me parece bien en esta situación. ¿Quizás haría una segunda pregunta que detalla la situación que tiene donde las cosas se están desmoronando?
bmike
2

Gracias a todos los carteles y comentaristas, este ha sido un hilo instructivo y útil para mí. Mi experiencia reciente puede ser útil para alguien. Utilizo mi Mac Mini con OS X10.8.1 y con 16G de RAM por completo para el software de creación de prototipos que se ejecutará en otros lugares. Les puedo asegurar que no "volveré a Facebook en unos minutos ni volveré a iniciar Word después de salir", sino que lo hago en mi macbook.

Mi tarea consistía en juntar una gran cantidad de datos, la E / S lleva mucho tiempo, por lo que la idea es leer la mayor cantidad de datos posible para ram de una sola vez, procesarlos allí y luego volver a escribirlos en el disco , luego repita el proceso hasta que termine, lo que lleva algunas horas. Lo que veo es que cada vez que leo una nueva porción de datos, salta la memoria inactiva, supongo que la IA del sistema asume que tal vez quiera volver a usar la vieja porción, lo cual no hago, y el libre la memoria cae

Después de algunas iteraciones de este proceso, la memoria libre se reduce a unos pocos MB, la memoria inactiva liberará algunos MB más y, finalmente, después de algunos minutos de disputas entre la memoria libre y la inactiva, la memoria inactiva se liberará hasta unos pocos GB a la vez. Todo es como lo describe @bmike, y tanto vm_stat 15 como Activity monitor muestran 0 salidas de página.

Excepto tal vez no del todo. Varias veces las cosas se han estado moviendo muy bien, me dirijo a tomar un café o una cena y no estoy monitoreando el proceso, y lo que no debería suceder sucede y el proceso de repente arroja un montón de páginas y se ralentiza. Estipulo que probablemente sea mi código malo el que está causando el problema, pero desearía poder apagar la memoria inactiva solo para eliminar esa fuente de variabilidad. ¿Esta roto? No lo diría en absoluto, pero diría que supongo que la gestión de la memoria no está optimizada para mi caso de uso.

usuario100345
fuente
0

Memoria inactiva utilizada por aplicaciones recientemente activas y cerradas. OS X lo mantiene reservado en caso de que el usuario quiera volver a abrir el programa. En este caso, OS X no necesita reubicar la memoria que acelera la velocidad de rendimiento. Si no vuelve a abrir el programa, después de un tiempo, la memoria del inactivo se liberará o reubicará. (C)

Esta característica es genial cuando tienes mucha RAM, pero cuando no lo es, es bastante molesto. En realidad se trata de cosas de manzana. Cuando tienes un potente dispositivo o Mac, todo es genial, pero cuando el dispositivo envejece, todas las funciones lo ralentizan.

Entonces tienes que usar trucos especiales para manejarlo.

Para la memoria inactiva hay un comando purgepara liberarla.

A. Shulev
fuente
-3

Básicamente está roto. La RAM inactiva debe "purgarse" automáticamente cuando la RAM libre es baja. ¿Cuál es el punto de mantener RAM para aplicaciones abiertas anteriormente con la esperanza de que el usuario la abra nuevamente? El hecho de que la RAM libre sea baja indica que las aplicaciones ACTIVE existentes pueden no tener suficiente RAM y se están intercambiando AHORA. Mantener GB de RAM para aplicaciones cerradas es una tontería. Según la propia descripción de Apple, la RAM inactiva se debe purgar o pedir prestada automáticamente cuando la RAM libre es baja. Claramente este no es el caso.

rouser
fuente
3
Los sistemas de memoria virtual hacen que grandes cantidades de RAM libre sean un desperdicio. Cuando un programa solicita una asignación de memoria, el núcleo genera más memoria virtual y la entrega como si fuera un caramelo. Solo cuando un programa llena esa memoria con datos reales, el sistema necesita dejar espacio en la RAM para esa operación. Ese "hacer espacio" se extrae de la memoria libre y luego inactiva, y el retraso para liberar la memoria inactiva es inmensamente pequeño. La purga que describe es exactamente lo que sucede, solo que implica que el sistema debe hacer el trabajo de purga por adelantado cuando el sistema es flojo y solo funciona si es necesario.
bmike
@bmike ¿Pero eso no significa que cuando no quede RAM libre y empiece una nueva aplicación, la porción de RAM inactiva disminuirá y la activa aumentará? Claramente, ese no es el caso y, según mi experiencia, el sistema se vuelve extremadamente lento cada vez que no queda más ram libre, a pesar de que hay gigabytes de ram inactivo. El sistema parece preferir cambiar el disco antes de considerar reutilizar el RAM inactivo.
codingFriend1
44
@ codingFriend1 Seamos precisos: ¿en cuántas páginas gratis vm_statconsidera "no más RAM libre"? Cuando la Mac es "lenta", ¿para qué sirve la página de entrada y salida de página vm_stat 1? Cada vez que estoy viendo esto en un sistema con problemas, me gusta que se vm_stat 15ejecute en una ventana de terminal (o que inicie sesión en el sistema de archivos) para poder saber con precisión cuál es la actividad de paginación al decidir si / cuándo ajustaré cosas como el buscapersonas. Este ejemplo tiene 100 MB de RAM libre, por lo que es probable que no esté bajo presión de paginación.
bmike
-4

La memoria inactiva en esencia, hace que la apertura de procesos anteriormente cerrados sea más rápida. Si encuentra que Mac OS está ocupando demasiada memoria que realmente no necesita de las docenas de pestañas que abrió en Safari o Chrome, simplemente use el comando 'purgar' en la Terminal. En OS X Mavericks simplemente use 'sudo purge' en su lugar (necesitará ingresar su contraseña). Ahorra unos segundos preciosos cuando necesitas abrir algo de nuevo, pero si quieres jugar un juego intensivo de RAM o abrir una aplicación con mucha RAM, definitivamente sugiero usar el comando de purga.

Kaness K
fuente
2
¿Cómo difiere esto de otras respuestas?
user151019