Memória inativa do Linux

3

Quando eu disparo o comando vmstat -s na minha caixa de Linux, recebo estatísticas como:

vmstat -s
16305800  total memory
16217112  used memory
9117400  active memory
6689116  inactive memory
88688  free memory
151280  buffer memory

Eu pulei alguns detalhes mostrados com este comando.

Eu entendo estes termos: Memória ativa é a memória que está sendo usada por um processo específico. Memória inativa é a memória alocada para um processo que não está mais em execução.

Só quero saber, existe alguma maneira de obter os processos, com os quais a memória inativa é alocada? Porque o comando top ou vmstat ainda mostra a memória usada como soma de memória ativa e inativa e eu posso ver apenas processos que estão usando memória ativa, mas quais processos estão usando memória inativa ainda é uma questão para mim.

    
por user515265 25.08.2016 / 07:10

2 respostas

9

Há casos em que observar a memória inativa é interessante, uma alta proporção de memória ativa para inativa pode indicar pressão de memória, por exemplo, mas essa condição é geralmente acompanhada de paginação / troca, que é mais fácil de entender e observar. O arquivo /proc/kpageflags contém um bitmap de 64 bits para cada página de memória física, você pode obter um resumo com page-types que pode vir com o seu kernel.

Sua compreensão de ativos e inativos está incorreta, no entanto

  • memória ativa são páginas que foram acessadas "recentemente"
  • memória inativa são páginas que não foram acessadas "recentemente"

"recentemente" não é uma medida absoluta de tempo, mas depende também da atividade e pressão de memória (você pode ler alguns detalhes técnicos no livro livre Entendendo o Gerenciador de Memória Virtual do Linux , Capítulo 10 é relevante aqui), ou a documentação do kernel (< href="https://www.kernel.org/doc/Documentation/vm/pagemap.txt"> pagemap.txt ).

Cada lista é armazenada como uma LRU (mais ou menos). As páginas de memória inativas são boas candidatas para gravar no swapfile, seja preventivamente (antes que as páginas de memória livre sejam necessárias) ou quando a memória livre fica abaixo de um limite configurado e páginas livres são necessárias.

Indique as maçãs às páginas alocadas para os processos em execução, com exceção da memória persistente ou compartilhada, toda a memória é liberada quando um processo é encerrado. Caso contrário, seria considerado um bug.

Esse sinalizador de página de baixo nível não precisa conhecer o PID (e uma página de memória pode ter mais de um PID com ele mapeado em qualquer caso), portanto as informações necessárias para fornecer os dados solicitados não estão em um Lugar, colocar.

Para fazer isso em uma base por processo, você precisa extrair os intervalos de endereços virtuais de /prod/PID/maps , converter em PFN (página física) com /proc/PID/pagemap e indexar em /proc/kpageflags . Está tudo descrito em pagemap.txt , e leva cerca de 60-80 linhas de C. A menos que você esteja solucionando problemas no sistema VM, os números não são muito interessantes. Uma coisa que você pode fazer é contar as páginas inativas e de backup por swap, esses números devem indicar os processos que têm um tamanho baixo de RSS (residente) em comparação com o VSZ (tamanho total da VM). Outra coisa pode ser inferir um vazamento de memória, mas existem ferramentas melhores para essa tarefa.

    
por 25.08.2016 / 18:12
5

Não existe tal ferramenta, pois é completamente inútil para qualquer programa externo.

A única parte do sistema que precisa saber é o manipulador de memória do kernel, que irá utilizá-lo para saber o que deve ser paginado (swap) se ficar sem memória disponível.

O único caso relacionado que poderia causar alguma preocupação é se o seu swap ficar quase cheio. Se isso acontecer, apenas aumente.

Eu nunca vi problemas reais que impliquem em investigar a memória inativa.

    
por 25.08.2016 / 07:25

Tags