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_AS
refere-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
sysctl
definiçã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.