¿La memoria inactiva está relacionada con la comprometida pero no utilizada?

¿La memoria inactiva está relacionada con la comprometida pero no utilizada?

Dela documentación de Linux procfs:

      Active: Memory that has been used more recently and usually not reclaimed unless
              absolutely necessary.
    Inactive: Memory which has been less recently used. It is more eligible to be
              reclaimed for other purposes
Committed_AS: The amount of memory presently allocated on the system. The committed 
              memory is a sum of all of the memory which has been allocated by 
              processes, even if it has not been "used" by them as of yet. (...)

Mi pregunta se relaciona con la memoria Commited_AS y la parte de ella que realmente se usa/no se usa. Tengo entendido que la memoria activa es la parte de la memoria comprometida que realmente se utiliza. Sin embargo, no sé qué pasa con la memoria inactiva; ¿Incluye también la memoria comprometida pero no utilizada, además de la memoria que no se ha utilizado recientemente?

Respuesta1

La memoria inactiva es la memoria que un proceso usó en algún momento y todavía está asignada, pero que no se ha usado recientemente. Es la memoria la que es más probable que se pagina para dejar espacio para los nuevos bloques necesarios.

La memoria comprometida es el total de todo el espacio que nominalmente se ha asignado a los procesos. Es el agregado de todo el espacio de memoria que los procesos creen tener disponible, incluyendo activo (en RAM y usado recientemente) inactivo (en RAM y usado en algún momento, pero sujeto a paginación porque su uso no fue reciente) paginado (una vez en RAM y usado, desde que fue paginado para intercambiar) y nunca usado (espacio devuelto por malloc() pero aún no tocado)

Respuesta2

Ver man proc; para citar directamente:

Un proceso que asigna 1 GB de memoria (usando malloc(3) o similar), pero toca solo 300 MB de esa memoria, aparecerá como que usa solo 300 MB de memoria, incluso si tiene el espacio de direcciones asignado para todo el 1 GB. Este 1 GB es memoria que ha sido "comprometida" por la VM y que la aplicación de asignación puede utilizar en cualquier momento.

Committed_ASse refiere a la cantidad total de memoria solicitada en el sistema para la asignación de memoria dinámica; esto significaría que la memoria inactiva (que no está en el montón) no se cuenta. Aquí es donde entra en juego el poder de la Memoria Virtual; un proceso "piensa" que tiene toda la memoria que solicitó, pero en realidad sólo tiene la que necesita.

Esto también se relaciona directamente con elovercommit_memory sysctlajuste de configuración que se puede utilizar para evitar el "compromiso excesivo" de memoria para que el servidor noOOMsí mismo si alguna vez necesita toda la memoria "comprometida" a la vez.

información relacionada