Confirma um vazamento de memória rastreando “free” e “cacheado” no topo?

1

Estou tentando confirmar que há um vazamento de memória no meu dispositivo Linux enquanto estiver no estado ocioso (não deve haver consumo contínuo de memória). Não estou interessado em identificar o processo que está causando o vazamento, mas apenas para concluir que a memória está vazando.

Estou usando top como a ferramenta de diagnóstico. Exemplo de campos de memória do topo:

Mem:    118616k total,    83980k used,    34636k free,        0k buffers
Swap:        0k total,        0k used,        0k free,    24140k cached

Eu posso ver o valor de free caindo continuamente, no entanto, o valor de cached aumentando constantemente.

Para confirmar que há um vazamento de memória, a soma free+cached deve estar caindo continuamente, em vez de apenas free decrescente (nesse caso, o kernel poderia estar apenas usando memória livre para armazenamento em cache)?

    
por TheMeaningfulEngineer 07.04.2015 / 15:37

2 respostas

0

Não há como saber se você tem vazamento de memória. Você pode supor que, com base no seu conhecimento do sistema e programas, em vez disso. Eu verificaria o arquivo /proc/meminfo , pegando o valor de MemFree e verificando em alguns intervalos de tempo. Se ele está sempre diminuindo, depois de alguns intervalos, devo afirmar que há um vazamento de memória.

  • cat /proc/meminfo | gawk '{if (/MemFree/ ~ $0) print $2}'

Mas, como eu sei, não há como verificar um vazamento de memória "global". Espere por outras respostas;)

    
por 07.04.2015 / 16:07
0

O vazamento de memória do processo userspace resultaria na crescente quantidade de memória usada por este processo .

Você poderia apenas monitorar os processos usando o modo top in batch (no entanto, parece que o top não suporta a classificação por memória no modo batch, link )

Como alternativa ao topo, você também pode executar o seguinte comando a cada minuto:

ps aux --sort -rss | head -n 10

para ver os 10 principais processos usando RAM.

Por exemplo,

while [ true ]; do ps aux --sort -rss | head -n 10 >> memory_usage_log.txt; echo "#########" >> memory_usage_log.txt; sleep 60; done;

Se algum processo usa mais e mais RAM com o tempo, enquanto não há atividade ou dados de entrada, então pode haver um vazamento de memória (por exemplo, se você iniciar um navegador da Web e continuar rodando sem usá-lo, o uso de memória do navegador da web, obviamente, não deve crescer com o tempo).

    
por 07.04.2015 / 18:06