Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:Solucionar problemas de uso elevado de memória slab_unreclaimable

Última atualização: Sep 21, 2026

Um uso elevado de memória slab_unreclaimable em uma instância ECS Linux pode indicar um 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" em uma instância Linux. Se o valor de SUnreclaim for elevado (por exemplo, SUnreclaim: 6069340 kB), a instância apresenta uso elevado de memória slab_unreclaimable. Quando slab_unreclaimable ultrapassa 10% da memória total, é provável que haja um vazamento de memória slab.

Causa

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

Solução

  1. Conecte-se à instância Linux.

    Para mais informações, consulte Remote connection methods for ECS instances.

  2. Identifique o slab não recuperável com mais objects ou maior uso de memória:

    1. Encontre o slab com mais objects ou maior uso de memória.

      slabtop -s -a

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

    2. Verifique se a memória do slab é não recuperá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 não recuperável; a saída 1 indica recuperável.

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

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

    Método 1: Usar o 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 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 de kmalloc-192 no crash:

      kmem -S kmalloc-192

      Para limitar a saída, exiba apenas as últimas linhas. Por exemplo, para ver as 10 últimas 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 alto uso de memória ALLOCATED.

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

      rd ffff88028398a000 512 -S

      Se a saída for extensa, exiba-a paginada.

      Se a função put_cred_rcu aparecer repetidamente na saída, pesquise put_cred_rcu no código-source do kernel Linux:

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

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

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

    1. Instale a ferramenta perf.

      sudo yum install perf -y
    2. Utilize o perf para capturar a 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 se chama testperf.txt:

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

      cat testperf.txt

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

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

    Possíveis soluções:

    • Atualize o kernel ou aplique um patch.

    • Ajuste os parâmetros do kernel.

    • Reinicie os 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 degradação de desempenho.