Identifique vazamentos de memória, fragmentação e erros OOM em clusters ACK usando diagnósticos visuais.
O diagnóstico de memória abrange três áreas: visão geral da memória, análise de memória e análise de OOM. Inspecione a memória nos níveis de nó e pod.
Os itens de diagnóstico exibidos refletem a configuração real do seu cluster.
Ao executar diagnósticos, o ACK coleta dados de cada nó, incluindo versão do sistema, status de carga, status do docker e do kubelet, além de mensagens de erro importantes nos logs do sistema. O ACK não coleta dados de negócios ou informações confidenciais.
Fluxo de trabalho de diagnóstico
Use as três áreas de diagnóstico em sequência para isolar problemas de memória:
Visão geral da memória — Verifique riscos como vazamentos, fragmentação, entradas Memcg não liberadas e desperdício de THP. Use os gráficos para confirme se o uso anormal ocorre na memória do kernel ou da aplicação.
Análise de memória — Investigue o uso de memória no nível de processo e pod para identificar qual processo ou container consome quantidade excessiva de memória anônima, page cache ou memória compartilhada.
Análise de OOM — Revise a contagem e os tipos de eventos OOM para determinar se os erros ocorrem no nível do nó (Host) ou do container (cgroup) e quais containers atingiram seus limites de memória.
Visão geral da memória
Identifica riscos de memória nos seguintes itens de diagnóstico.
|
Item de diagnóstico |
Descrição |
|
Leaked Memory |
Verifica vazamentos de memória do kernel no Slab, Vmalloc e buddy system (allocpage). |
|
Memory Usage |
Exibe a utilização da memória do sistema. |
|
Memcg |
Verifica se grupos de memória cgroups (Memcg) não liberados degradam o desempenho do sistema ou causam erros estatísticos. |
|
Memory Fragmentation |
Detecta fragmentação de memória que degrada o desempenho do sistema. |
|
THPZeroPage |
Avalia a proporção de desperdício de Transparent Huge Page (THP). |
O uso da memória do sistema aparece em gráficos divididos em três categorias:
Memória do kernel (kernel): total de memória usada pelo kernel do sistema operacional.
Memória da aplicação (app): total de memória usada por programas em modo usuário.
Memória livre (free): total de memória livre do sistema.
Conceitos principais
Os termos a seguir são usados em todo o diagnóstico de memória.
|
Termo |
Descrição |
|
Vazamento de memória |
Ocorre quando memória alocada dinamicamente nunca é liberada, fazendo com que o uso cresça continuamente. Vazamentos não resolvidos degradam o desempenho e podem causar falhas. |
|
Utilização de memória |
Utilização de memória = (Memória total - Memória livre) x 100 / Memória total. O page cache conta como memória livre e não afeta a utilização, pois o kernel pode recuperá-lo a qualquer momento. |
|
Memcg não liberado |
Grupo de memória cgroup não liberado devido a uma exceção do sistema. Pode degradar o desempenho do sistema. |
|
Fragmentação de memória |
Com o tempo, blocos contíguos de memória livre tornam-se pequenos demais para grandes solicitações de alocação. Isso atrasa a alocação e causa instabilidade nas aplicações. |
|
Proporção de desperdício de THP |
Proporção de desperdício de THP = Número de THPs zeradas x 100% / Número total de THPs. Consulte Detalhes sobre THP abaixo. |
|
Buddy system |
Algoritmo do kernel Linux para gerenciamento de páginas de memória. Divide as páginas em 11 grupos com tamanhos de bloco em potência de dois: 4 KB, 8 KB, 16 KB, 32 KB ... 4 MB. A maioria das páginas tem 4 KB. |
|
Slab |
Aloca pequenos pedaços de memória sobre o buddy system. |
|
Vmalloc |
Aloca memória com mapeamento não linear sobre o buddy system. |
|
Page cache (filecache) |
O Linux armazena conteúdo de arquivos em cache na memória para acelerar acessos subsequentes. |
|
Memória anônima |
Memória alocada dinamicamente para heap e stack de um processo via |
|
Memória compartilhada |
Bloco de memória compartilhado por dois ou mais processos para comunicação entre eles. |
|
tmpfs |
Sistema de arquivos temporário do Linux suportado por memória. Todas as leituras e gravações ficam armazenadas em cache na memória. |
|
hugetlb |
Memória consumida por huge pages em um sistema de arquivos. |
Detalhes sobre THP
Transparent Huge Pages (THP) são huge pages com tamanho de 2 MiB ou 1 GiB no kernel. Cada subpágina tem 4 KiB; portanto, uma THP de 2 MiB equivale a 512 subpáginas.
Com o THP ativado, o kernel aloca THPs dinamicamente para reduzir falhas no Translation Lookaside Buffer (TLB) e melhorar o desempenho. No entanto, o THP pode causar inchaço de memória e overcommitment: quando uma aplicação solicita apenas 8 KiB (2 subpáginas), o kernel aloca uma THP completa de 2 MiB. Isso deixa 510 subpáginas zeradas que desperdiçam resident set size (RSS) e podem desencadear erros OOM.
Métricas de memória do kernel
Na maioria dos casos, vazamentos de memória indicam uso anormal no Sunreclaim ou no buddy system. Monitore essas métricas atentamente.
|
Métrica |
Descrição |
|
SReclaimable |
Memória que o Slab pode recuperar. |
|
Sunreclaim |
Memória que o Slab não pode recuperar. Crescimento anormal indica fortemente um vazamento de memória do kernel. |
|
PageTables |
Memória ocupada pelas tabelas de páginas do kernel. |
|
Vmalloc |
Memória alocada pelo Vmalloc. |
|
KernelStack |
Total de memória de stack do kernel usada pelos processos. |
|
AllocPages |
Memória alocada do buddy system por funções como |
Métricas de memória da aplicação
Ao analisar o uso de memória em modo usuário, concentre-se na memória anônima, memória compartilhada e page cache.
|
Métrica |
Descrição |
|
filecache |
Page cache recuperável ao execute drop caches. |
|
anon |
Memória anônima usada pela heap e stack de um programa. Uso elevado sugere vazamento de memória do processo ou THP ativado. |
|
mlock |
Memória bloqueada pelo sistema. |
|
huge |
Memória usada por huge pages. |
|
buffer |
Memória usada por metadados de dispositivos de bloco e sistemas de arquivos. |
|
shmem |
Memória compartilhada (tmpfs). Vazamentos ocorrem se um arquivo tmpfs não for excluído após a saída do processo ou se um arquivo for excluído enquanto ainda está aberto. |
Análise de memória
Fornece duas visualizações: memória de processo e memória de pod.
Memória de processo
Lista processos ordenados por uso de memória e detalha memória anônima, page cache e memória compartilhada.
Memória de pod
Mostra quais arquivos ocupam page cache e memória compartilhada em cada container e pod, com as proporções de cache ativo e inativo.
|
Item de diagnóstico |
Descrição |
|
Pod |
Nome do pod. |
|
Container |
Nome do container. |
|
File |
Caminho completo do arquivo, incluindo o nome. |
|
Cache |
Page cache (filecache) ocupado pelo arquivo. |
|
Container Cache |
Cache no nível do container ocupado pelo arquivo. Vários processos no mesmo container podem referenciar o mesmo arquivo. |
|
Active Cache |
Page cache atualmente em uso. |
|
Inactive Cache |
Page cache não usado, elegível para recuperação. |
Análise de OOM
Diagnostica erros de falta de memória (out-of-memory) nos seguintes itens.
|
Item de diagnóstico |
Descrição |
|
OS OOM Count |
Total de erros OOM desde a inicialização do host até o diagnóstico. |
|
Available Memory |
Memória livre atual do sistema. |
|
Low Watermark |
Limiar baixo de memória. Quando a memória disponível cai abaixo deste valor, o kernel aciona a recuperação assíncrona de memória. |
|
Container |
Nome do pod, ID do container ou nome do cgroup. |
|
limit |
Limite de memória defina para o container. |
|
usage |
Memória atual usada pelo container. |
|
OOM Count |
Total de erros OOM no container. |
|
OOM Type |
Tipo de erro OOM: Host ou cgroup. |