A memória inativa está relacionada ao Commited, mas não é utilizada?

A memória inativa está relacionada ao Commited, mas não é utilizada?

Dea documentação do procfs do Linux:

      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. (...)

Minha pergunta está relacionada à memória Commited_AS e à parte dela que é realmente usada/não utilizada. Meu entendimento é que a memória ativa é a parte da memória comprometida que é realmente usada. Porém, não sei o que acontece com a memória inativa; inclui também a memória comprometida, mas não utilizada, além da memória que não foi usada recentemente?

Responder1

Memória inativa é a memória que um processo usou em algum momento e ainda está alocada, mas que não foi usada recentemente. É a memória que tem maior probabilidade de ser paginada para liberar espaço para os novos blocos necessários.

A memória comprometida é o total de todo o espaço que foi nominalmente alocado para processos. É o agregado de todo o espaço de memória que os processos acreditam ter disponível, incluindo ativo (na RAM e usado recentemente), inativo (na RAM e usado em algum momento, mas sujeito a paginação porque seu uso não foi recente) paginado (uma vez na RAM e usado, desde que foi paginado para troca) e nunca usado (espaço retornado por malloc() mas ainda não tocado)

Responder2

Ver man proc; para citar diretamente:

Um processo que aloca 1 GB de memória (usando malloc(3) ou similar), mas toca apenas 300 MB dessa memória, aparecerá como usando apenas 300 MB de memória, mesmo que tenha o espaço de endereço alocado para todo o 1 GB. Este 1 GB é a memória que foi "comprometida" pela VM e pode ser usada a qualquer momento pelo aplicativo de alocação.

Committed_ASrefere-se à quantidade total de memória solicitada no sistema para alocação dinâmica de memória; isso significaria que a memória inativa (que não está no heap) não é contada. É aqui que entra o poder da Memória Virtual; um processo “pensa” que tem toda a memória que solicitou, mas na realidade só tem o que precisa.

Isto também está diretamente ligado aoovercommit_memory sysctldefinição de configuração que pode ser usada para evitar "comprometimento excessivo" de memória para que o servidor nãoOOMse precisar de toda a memória "comprometida" de uma só vez.

informação relacionada