Modo geral de monitorar TODOS os usos da memória

4

Eu tenho o Kubuntu 16.04 e estou usando o ZFS.

Como você pode ver em superusuário , eu só tive uma longa jornada em rastrear onde minha memória estava desaparecendo.

Descobriu-se que o ARC do ZFS estava comendo tudo sem aparecer nas ferramentas / arquivos além de seu próprio arquivo especial /proc/spl/kstat/zfs/arcstats

Existe uma maneira genérica de ver quanta memória é usada pelo kernel e, se possível, por quais módulos do kernel?

Exemplo:

free -h estava me mostrando isso:

              total        used        free      shared  buff/cache   available                                           
Mem:            31G         19G        1.8G        406M         10G        5.2G                                           
Swap:          8.0G          0B        8.0G 

Então, 19GB em uso. Mas TOP só me mostrou cerca de 8GB de memória usada. Então fui em busca dos outros 11GB. 6GB acabou por ser laje, que pode ser visto em /proc/memstat e com nmon . Mas 5GB ainda estavam faltando.

No final, descobri que ele havia sido consumido pelo ARC do ZFS. Mas foi listado apenas em seu próprio arquivo de informações especiais. /proc/spl/kstat/zfs/arcstats

Nem /proc/memstat nem top , htop , nmon , free ou atop poderiam me dizer quem está usando esses 5 GB.

Existe um arquivo / ferramenta para ver a memória usada por tais módulos especiais , sem conhecer / entender esses módulos? Ou eu tenho que considerar todos os módulos existentes se eu quiser escrever uma ferramenta de monitoramento que possa me dizer isso?

Da minha perspectiva, a informação de memória no Linux é uma bagunça total. Dúzia de números que não somam memória total. Aposto que free calcula o parâmetro "em uso" subtraindo "free / cache / buffers" do total.

Eu gostaria de ter / escrever uma ferramenta / info onde eu possa ver

Total memory: 32GB
  in use: 19GB
    processes: 8GB
    slab: 5GB
    mapper: 1Gb
    kernel modules: 5Gb
       kernel: 0.3GB
       spl: 4.7GB
  cache: 6GB
  buffers: 2GB
  free: 5GB
Additional stats:
  Active memory: 8.3GB
    Active(anon): 7.1GB
    Active(file): 1.2GB
  Inactive memory: 2.4GB
  ...

Você sabe, onde cada subseção realmente se soma à seção pai e cada byte de memória é contabilizado;)

Então, tal ferramenta é possível no Linux? Já existe?

Atualização 1

A ferramenta smem, como sugerido abaixo, realmente mostra uma coluna "Dynamic kernel memory", que soma até 100% da memória e conta para o ARC. No entanto de acordo com esta resposta

  

BTW: Eu já verifiquei fontes smem, basicamente faz (memtotal - userspace - free - cache).

Portanto, isso só é conseguido simplesmente subtraindo todas as figuras conhecidas de / proc / memstat e rotulando o que está faltando como "Memória do Kernel Dinâmico noncache" Eu acho isso perturbador e realmente espero que o kernel linux tenha mais para oferecer do que isso.

    
por Torge 12.10.2016 / 23:08

1 resposta

6

Você pode tentar smem pelo menos uma boa parte do que está procurando.

Está disponível no repositório Universe e pode ser instalado com sudo apt-get install smem

Existem vários switches úteis que são abordados na página do manual man smem

Alguns exemplos são os seguintes: Note que estou usando a opção -t para totais em todos os exemplos por questões de brevidade. você pode deixar de fora se quiser uma saída mais detalhada.

PSS is the interesting column in these examples as it takes shared memory into account.
Unlike RSS it's meaningful to add it up.

Todo o sistema

me@zippy-64bit:~$ smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory        989656     860076     129580 
userspace memory             936032     180020     756012 
free memory                 5692716    5692716          0 
----------------------------------------------------------
                            7618404    6732812     885592 

Pelo usuário

me@zippy-64bit:~$ smem -tu
User     Count     Swap      USS      PSS      RSS 
me          67        0   861452   898915  1245592 
---------------------------------------------------
            67        0   861452   898915  1245592

Além disso, são smemcap para captura de dados para análise futura com smem e smemstat que relata o uso da memória física levando em consideração a memória compartilhada . A ferramenta pode relatar um instantâneo atual do uso de memória ou despejar periodicamente quaisquer alterações na memória.

Há também uma lista na parte inferior da página de pacotes semelhantes.

Fontes:

Alternativa 1: Você também pode considerar a análise da saída de cat /proc/meminfo ou, se desejar, pela página less /proc/meminfo

Muitas das informações aqui são usadas pelos comandos free , top e ps . De fato, a saída do comando free é similar em aparência ao conteúdo e estrutura de / proc / meminfo. Mas, olhando diretamente para / proc / meminfo, muitos outros detalhes são revelados, incluindo:

$ cat /proc/meminfo | grep "Slab"
Slab:             267680 kB

Fonte alternativa: link

Alternativa 2: Se você está verdadeiramente comprometido com uma melhor análise da RAM do kernel, você pode rola seu próprio kstat. Enquanto kstat parece ser um comando somente do Solaris. o link acima levará você a fontes para uma tentativa de fonte aberta em kstat que foi modificada pela última vez em 2013 (a partir desta edição). Um programador C inteligente pode modificar o código para sua finalidade específica.

Alternativa 2 fonte:

    
por Elder Geek 22.10.2016 / 16:40