Estás experimentando el problema de Linux Ate My Ram .
No se asuste
Esto no es un problema.
Su sistema funciona según lo diseñado.
El problema no es su sistema operativo; el problema es su comprensión de lo que es la memoria "libre".
Los sistemas Unix usan memoria para algo más que solo ejecutar programas. La memoria puede usarse para:
- Ejecución de programas (activo / usado)
- Almacenamiento de datos en tránsito (buffers)
- Almacenamiento en caché de datos recientemente leídos / escritos en el disco (caché)
- Absolutamente nada (gratis)
Lo que sigue es un recorrido breve (y en gran medida incompleto) de cómo los sistemas Unix modernos informan el uso de RAM.
¿Qué es la memoria libre (la definición del sistema operativo) ?
Cuando un sistema Unix informa RAM como Libre , significa "No estoy usando esta RAM para nada".
La memoria RAM gratuita no tiene ningún valor: no está haciendo que su sistema sea más rápido, solo está "libre" en caso de que algo lo necesite. Ese algo podría ser cualquiera de los otros tres elementos que mencioné anteriormente.
¿Qué son la memoria caché y la memoria intermedia?
La memoria caché y la memoria intermedia son RAM que el sistema operativo está utilizando para acelerar su sistema.
Esta memoria no es necesaria para ejecutar programas en este momento , por lo que su sistema operativo la está utilizando para almacenar datos que necesita con frecuencia, por ejemplo, la biblioteca C (que necesitan casi todos los programas que ejecuta) casi siempre se guarda en la cache
memoria, por lo que el sistema no tiene que ir al disco para encontrar las instrucciones que necesita para imprimir "Hello World" en la pantalla.
En realidad, es mucho más complicado que eso: hay memoria compartida , memoria cableada , etc., pero para nuestros propósitos esta explicación simple es adecuada.
¿Qué es la memoria activa?
La memoria activa es parte de lo que entendemos como memoria "usada" - RAM que las aplicaciones están usando para lo que sea que hagan - ordenar hojas de cálculo, servir páginas web, editar gráficos, etc.
La memoria "activa" ha estado "activa" recientemente - - el programa que afirma que ha hecho uso de sus contenidos (lectura o escritura), y no se considera un buen candidato para el intercambio.
¿Qué es la memoria inactiva?
Al igual que la memoria activa, la memoria inactiva es la RAM que las aplicaciones usan para lo que sea que hagan. La diferencia es que no se ha accedido a esta memoria desde hace tiempo, por lo que si se llega a empujar, el sistema operativo cree que se puede cambiar al disco y (con un poco de suerte) el programa afirma que no la volverá a pedir, por lo que Nunca lo notaré.
¿Qué es la memoria "usada" (la definición HUMANA)
Lo que usted y yo pensamos como memoria "usada" es, esencialmente, la suma de la memoria activa e inactiva. Toda la RAM actualmente reclamada por las aplicaciones para su uso.
Mientras tenga más RAM instalada que la suma de la memoria activa e inactiva (más un buen margen de seguridad de, digamos, 512-1024MB en la parte superior) estará en un lugar ACEPTABLE: su sistema operativo probablemente no afectará el intercambio y el rendimiento. .
¿Qué es la memoria "libre" (la definición HUMANA) ?
Lo que usted y yo pensamos como memoria "libre" es la memoria disponible para ejecutar programas.
Esto es un poco más complicado que solo la figura "Gratis" que informa su sistema operativo. Cuando un programa solicita RAM, el sistema operativo intentará obtener esa RAM de la manera menos disruptiva posible:
- Si hay memoria libre disponible (sin hacer nada), se asignará esa RAM.
- Si no hay memoria libre disponible, el sistema operativo eliminará el espacio de la memoria caché y el búfer: se eliminarán los elementos a los que se accedió menos recientemente / con menos frecuencia en el grupo de búferes, y esa RAM se le dio al programa.
- Si no hay memoria RAM de búfer / caché para canibalizar, el intercambiador mirará la memoria inactiva y seleccionará las regiones que cree que es menos probable que accedan. Que los datos se copia en disco de intercambio (disco), y la RAM recién liberados dado al programa.
- Si se ha intercambiado toda la RAM inactiva, el intercambiador comenzará a colocar la RAM activa en el disco.
(Aquí se trata de que el rendimiento generalmente recae en los perros: cada vez que un programa obtiene su turno en la CPU, sus bits intercambiados deben volver a la RAM, lo que significa que la memoria activa de algún otro programa debe cambiarse : el la alta rotación en el intercambio se llama paliza )
- Si el sistema ha cambiado todo lo que puede (y ha llenado la partición de intercambio), o si está ejecutando un sistema sin una partición de intercambio, suceden cosas malas . En este punto ocurrirá una de dos cosas:
malloc()
fallará. Este es el comportamiento conforme con POSIX: el sistema operativo le dirá al programa que solicita RAM que no puede satisfacer la solicitud.
El programa puede pedir menos RAM o, si no puede conformarse con una pequeña porción de memoria, puede limpiar y salir. (Si el programa está mal escrito, simplemente se bloqueará).
- Si está en una caja de Linux, el OOM-Killer puede ir en una unidad de estilo de pandillas matando juerga, terminando otros procesos para tratar de liberar suficiente RAM para cumplir con la solicitud.
En caso de que no pueda distinguir mi descripción aquí y mi respuesta a la pregunta vinculada, creo que esta es una forma terrible de abordar el problema.
¿Por qué sube RAM libre cuando borras archivos?
En el ejemplo de la pregunta aquí, notó que es posible "liberar" RAM eliminando el archivo de copia de seguridad; la explicación es bastante simple: dado que nada está usando ese archivo (sin identificadores de archivo abiertos) y ya no es accesible desde el sistema de archivos (desvinculado) el sistema operativo sabe que nadie volverá a acceder a esos datos y purga los datos del caché del sistema de archivos.
Esto hace que el sistema operativo informe más memoria libre, pero no tiene impacto en el rendimiento del sistema.