Criação de perfil de uso de kmalloc

0

Eu pareço ter um vazamento de memória no espaço do kernel, a placa mostra kmalloc-4096 crescendo perpetuamente um clipe até que monopolize todos os recursos de ram no sistema e force a troca.

O Free mostra muito desse uso de memória como cache, mas ele se recusa a liberar quando necessário, ou mesmo quando sinalizado para ser limpo manualmente. Um exemplo do que estamos vendo:

$ sudo su -c "free -h && sync && echo 3 > /proc/sys/vm/drop_caches && free -h"
              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        166M        280M         10G        104M
Swap:           15G        7.8G        8.1G
              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        186M        280M         10G        115M
Swap:           15G        7.8G        8.1G

Devo fazer o perfil do kmalloc para determinar onde está o vazamento? Se sim, como eu poderia fazer isso?

Este é um arquivo Ubuntu 16.04 instalado em um Intel i5 Skylake.

$ uname -a
Linux fire 4.4.0-78-generic #99-Ubuntu SMP Thu Apr 27 15:29:09 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    
por DivinusVox 31.05.2017 / 22:19

1 resposta

0

O 'sync' não vai reduzir o buff / cache, apenas solicita que os dados vão para os dispositivos de bloco. O ponto do cache é que os dados permanecem nos caches da RAM. Enviar um 3 para drop_caches não espera que os caches caiam também. Você poderia adicionar um 'sleep 60' antes do 'free'? Isso pode permitir algum tempo para que a memória seja limpa antes de reportar gratuitamente.

Deixar um 'watch -n60 cat / proc / meminfo' pode ajudar a mostrar a área de memória que está crescendo, mas cache e buff não são vazamentos sozinhos, consumindo memória, eles estão cumprindo sua finalidade e fazendo o melhor uso de o recurso disponível do seu sistema.

Se um processo for trocado para o disco, isso não significa automaticamente que algo ruim aconteceu. O kernel está fazendo a coisa certa se esse processo não estiver usando todas as suas páginas e ficar ocioso, há uma chance razoável de que em um servidor web o conteúdo da raiz www seja necessário antes que uma cópia do mutt seja executada. Tela GNU quando o usuário se desconectou, por exemplo.

Se você ainda considera que o kernel está consumindo a RAM através de módulos, você pode inspecionar um pouco mais usando:

awk '{ print $2" "$1 }' /proc/modules  | sort -n

Você está usando o ZFS? Isso é uma grande fome para a RAM, mas, assim como o cache, ele tenta manter o disco rígido na memória RAM no caso de ser necessário.

    
por 31.05.2017 / 22:46