Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:Solucionar alto uso de memória slab_unreclaimable

Última atualização: Jun 29, 2026

Um valor elevado de memória slab_unreclaimable em uma instância ECS Linux pode indicar vazamento de memória slab do kernel. Este guia ajuda a identificar a causa raiz e resolver o problema.

Sintomas

Execute cat /proc/meminfo | grep "SUnreclaim" na instância Linux. Se o valor de SUnreclaim for alto (por exemplo, SUnreclaim: 6069340 kB), a instância apresenta uso elevado de memória slab_unreclaimable. Caso slab_unreclaimable ultrapasse 10% da memória total, provavelmente há vazamento de memória slab.

Causa

O alocador slab do kernel armazena objetos de memória de mesmo tamanho em cache para reduzir a fragmentação. A parte slab_unreclaimable retém memória que o kernel não consegue liberar por conter objetos ativos, como caches de dentry e inode. Se esses caches crescerem excessivamente, o alto uso de slab_unreclaimable pode acionar o OOM Killer.

Solução

  1. Conecte-se à instância Linux.

    Para mais informações, consulte Métodos de conexão remota para instâncias ECS.

  2. Identifique o slab irrecuperável com maior número de objects ou maior uso de memória:

    1. Localize o slab com mais objects ou maior consumo de memória.

      slabtop -s -a

      Anote o nome do slab (coluna NAME) com o maior valor de OBJ/SLAB.

    2. Verifique se a memória do slab é irrecuperável.

      Substitua <slab NAME> pelo nome do slab com o maior valor de OBJ/SLAB obtido na etapa anterior.

      cat /sys/kernel/slab/<slab NAME>/reclaim_account

      Por exemplo, verifique se kmalloc-192 é recuperável:

      cat /sys/kernel/slab/kmalloc-192/reclaim_account

      A saída 0 indica que é irrecuperável; a saída 1 indica que é recuperável.

  3. Identifique a causa raiz do vazamento de memória slab.

    Use a ferramenta crash para análise estática ou a ferramenta perf para análise dinâmica. Os exemplos a seguir usam o slab kmalloc-192.

    Método 1: Usar crash para análise estática

    1. Instale a ferramenta crash.

      sudo yum install crash -y
    2. Instale a ferramenta kernel-debuginfo.

      • Alibaba Cloud Linux 3

        sudo yum install -y kernel-debuginfo-<kernel version> --enablerepo=alinux3-plus-debug
        Nota

        Substitua kernel version pela versão real do seu kernel. Execute uname -r para verificar.

      • Alibaba Cloud Linux 2

        sudo yum install kernel-debuginfo -y
    3. Inicie a ferramenta crash.

      sudo crash
    4. Visualize as estatísticas de memória para kmalloc-192 no crash:

      kmem -S kmalloc-192

      Para limitar a saída, visualize apenas as últimas linhas. Por exemplo, para visualizar as últimas 10 linhas:

      kmem -S kmalloc-192 | tail -n 10

      Exemplo de saída do comando:

          SLAB              MEMORY            NODE  TOTAL  ALLOCATED  FREE
        ffffea004c94e780  ffff88132539e000     0     42         29    13
        ffffea004cbef900  ffff88132fbe4000     0     42         40     2
        ffffea000a0e6280  ffff88028398a000     0     42         40     2
        ffffea004bfa8000  ffff8812fea00000     0     42         41     1
        ffffea006842b380  ffff881a10ace000     0     42         41     1
        ffffea0009e7dc80  ffff880279f72000     0     42         34     8
        ffffea004e67ae80  ffff881399eba000     0     42         40     2
        ffffea00b18d6f80  ffff882c635be000     0     42         42     0

      A saída mostra que ffff88028398a000 possui pouca memória FREE e alta memória ALLOCATED.

    5. Visualize os dados de memória para ffff88028398a000:

      rd ffff88028398a000 512 -S

      Se a saída for extensa, exiba-a em páginas.

      Caso a função put_cred_rcu se repita várias vezes na saída, pesquise por put_cred_rcu no código-fonte do kernel Linux:

      void __put_cred(struct cred *cred)
      {
          call_rcu(&cred->rcu, put_cred_rcu);
      }

      A função put_cred_rcu libera a struct cred de forma assíncrona. A presença repetida de put_cred_rcu ao final da struct cred indica vazamento de memória slab no kernel.

    Método 2: Usar perf para análise dinâmica

    1. Instale a ferramenta perf.

      sudo yum install perf -y
    2. Use o perf para capturar memória não liberada em kmalloc-192 durante 200 segundos:

      sudo perf record -a -e kmem:kmalloc --filter 'bytes_alloc == 192' -e kmem:kfree --filter ' ptr != 0' sleep 200
    3. Salve os dados capturados em um arquivo.

      Neste exemplo, o arquivo chama-se testperf.txt:

      sudo perf script > testperf.txt
    4. Visualize o arquivo testperf.txt:

      cat testperf.txt

      Identifique slabs sem memória free e rastreie a função responsável no código-fonte do kernel.

  4. Após identificar o caminho de chamada de função ou a estrutura de dados do kernel causadora do vazamento, trabalhe com desenvolvedores do kernel ou profissionais de O&M para encontrar a origem e resolver o problema.

    Possíveis soluções:

    • Atualize o kernel ou aplique patches.

    • Ajuste parâmetros do kernel.

    • Reinicie serviços ou módulos afetados.

    • Otimize aplicações ou drivers.

    • Reinicie o sistema.

Referências

Vazamentos de memória slab reduzem a memória disponível, causam fragmentação e podem acionar o OOM Killer ou degradar o desempenho.