Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:Prevent application performance jitter caused by cgroups

Última atualização: Jun 29, 2026

Os control groups (cgroups) alocam, gerenciam e monitoram recursos do sistema no Linux. Quando a quantidade ou a profundidade da hierarquia de cgroups cresce excessivamente, o kernel gasta tempo de CPU desproporcional percorrendo essas estruturas, o que degrada o desempenho das aplicações.

Sintomas

Em ambientes de contêineres, esse problema se manifesta da seguinte forma:

  • Picos intermitentes de latência -- as aplicações apresentam aumentos repentinos e ocasionais na latência das requisições.

  • Alto uso de CPU pelo kernel -- a métrica sys (percentual de CPU do kernel) atinge 30% ou mais no host do contêiner.

Execute o comando top para verificar o uso de CPU pelo kernel. Na saída abaixo, o valor sy de 30,0% indica que o kernel consome uma parcela significativa do tempo de CPU:

top - 16:21:19 up 22 days,  1:59,  3 users,  load average: 40.02, 30.02, 25.06
Tasks: 193 total,   3 running, 190 sleeping,   0 stopped,   0 zombie
%Cpu(s):  20.0 us,  30.0 sy,  0.0 ni, 45.0 id,  5.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 24130808 total,  2071424 free,  1832512 used, 20226872 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 19737776 avail Mem

Diagnóstico

Verifique a quantidade de cgroups

Execute o comando a seguir para visualizar os estados dos cgroups:

cat /proc/cgroups

A saída lista cada subsistema de cgroup com quatro colunas:

Coluna

Descrição

subsys_name

Nome do controlador de cgroup

hierarchy

ID da hierarquia de cgroup onde este controlador está montado

num_cgroups

Quantidade de cgroups que utilizam este controlador

enabled

Indica se o controlador está ativado (1) ou desativado (0)

Exemplo de saída:

#subsys_name  hierarchy num_cgroups enabled
cpuset  2     200     1
cpu     2     200     1
cpuacct 2     200     1
blkio   6     62      1
memory  10    2040    1
devices 5     59      1

Neste exemplo, o controlador de memória possui 2.040 cgroups, valor muito acima do limite recomendado de 1.000.

Analise o uso de CPU do kernel com perf

Para confirmar se a travessia dos cgroups consome tempo de CPU, utilize o perf para amostrar a atividade do kernel.

  1. Instale o perf:

       yum install perf -y
  2. Amostre a atividade de todo o sistema durante 10 segundos:

       perf record -a -g sleep 10
  3. Visualize os resultados. Se os cgroups causarem o problema, a saída mostrará funções de cgroup de memória dominando o tempo de CPU do kernel:

       perf report
       31.04%  [kernel]  [k] memcg_stat_show
       18.61%  [kernel]  [k] memcg_sum_events.isra.22
        9.41%  [kernel]  [k] mem_cgroup_iter
        6.94%  [kernel]  [k] css_next_descendant_pre
        6.11%  [kernel]  [k] _find_next_bit
        3.96%  [kernel]  [k] mem_cgroup_usage.part.43
        1.75%  [kernel]  [k] find_next_bit
        1.38%  [kernel]  [k] mem_cgroup_node_nr_lru_pages

Causa raiz

A função memcg_stat_show agrega estatísticas de todos os cgroups de memória. Quando a quantidade de cgroups de memória é excessiva, percorrê-los demanda muito tempo e consome uma parcela significativa da CPU do kernel. Na saída do perf acima, apenas a função memcg_stat_show responde por 31% do tempo de CPU.

Quantidades excessivas de cgroups cpuacct e cpu também podem afetar o Completely Fair Scheduler (CFS) e o mecanismo de balanceamento de carga do kernel Linux.

Diretrizes de prevenção

Para evitar oscilações de desempenho relacionadas a cgroups nas suas instâncias Alibaba Cloud Linux:

  • Limite os cgroups filhos por pai -- não crie mais de 10 cgroups filhos dentro de cada cgroup.

  • Restrinja a quantidade total de cgroups -- mantenha o número total de cgroups abaixo de 1.000 em todo o sistema. Quanto menos cgroups, melhor.