Pular para o conteúdo principal
O ClickHouse usa o jemalloc como alocador global. O jemalloc inclui algumas ferramentas para amostragem e profiling de alocação. Para tornar o profiling de alocação mais prático, são fornecidos comandos SYSTEM junto com comandos de quatro letras (4LW) no Keeper.

Amostragem de alocações e gravação de perfis de heap

Se você quiser fazer amostragem e profiling de alocações no jemalloc, precisará iniciar o ClickHouse/Keeper com o profiling ativado usando a variável de ambiente MALLOC_CONF:
jemalloc amostrará as alocações e armazenará as informações internamente. Você pode instruir o jemalloc a gravar o perfil atual executando:
Por padrão, o arquivo de perfil de heap será gerado em /tmp/jemalloc_clickhouse._pid_._seqnum_.heap, em que _pid_ é o PID do ClickHouse e _seqnum_ é o número de sequência global do perfil de heap atual. Para o Keeper, o arquivo padrão é /tmp/jemalloc_keeper._pid_._seqnum_.heap e segue as mesmas regras. Um local diferente pode ser definido adicionando a opção prof_prefix à variável de ambiente MALLOC_CONF. Por exemplo, se você quiser gerar perfis na pasta /data, em que o prefixo do nome do arquivo será my_current_profile, poderá executar o ClickHouse/Keeper com a seguinte variável de ambiente:
O arquivo gerado será acrescido do prefixo PID e do número de sequência.

Analisando perfis de heap

Depois que os perfis de heap forem gerados, eles precisam ser analisados. Para isso, pode-se usar a ferramenta do jemalloc chamada jeprof. Ela pode ser instalada de várias maneiras:
  • Usando o gerenciador de pacotes do sistema
  • Clonando o repositório do jemalloc e executando autogen.sh a partir da pasta raiz. Isso disponibilizará o script jeprof dentro da pasta bin
O jeprof usa addr2line para gerar stacktraces, o que pode ser bastante lento. Se esse for o caso, recomenda-se instalar uma implementação alternativa da ferramenta.
Há vários formatos diferentes que podem ser gerados a partir do perfil de heap usando jeprof. Recomenda-se executar jeprof --help para obter informações sobre o uso e as várias opções oferecidas pela ferramenta. Em geral, o comando jeprof é usado da seguinte forma:
Se quiser comparar quais alocações ocorreram entre dois perfis, pode definir o argumento base:

Exemplos

  • se você quiser gerar um arquivo de texto com cada procedimento escrito em uma linha:
  • se você quiser gerar um arquivo PDF com um gráfico de chamadas:

Gerando um flame graph

jeprof permite gerar stacks colapsadas para criar flame graphs. Você precisa usar o argumento --collapsed:
Depois disso, você pode usar várias ferramentas para visualizar pilhas colapsadas. A mais popular é FlameGraph, que contém um script chamado flamegraph.pl:
Outra ferramenta interessante é o speedscope, que permite analisar os stacks coletados de forma mais interativa.

Controlando o profiler de alocação em tempo de execução

Se o ClickHouse/Keeper for iniciado com o profiler habilitado, haverá suporte a comandos adicionais para desabilitar/habilitar o profiling de alocação em tempo de execução. Usando esses comandos, fica mais fácil fazer profiling apenas em intervalos específicos. Para desabilitar o profiler:
Para habilitar o profiler:
Também é possível controlar o estado inicial do profiler definindo a opção prof_active, que vem habilitada por padrão. Por exemplo, se você não quiser coletar amostras de alocação durante a inicialização, mas apenas depois, poderá habilitar o profiler. Você pode iniciar o ClickHouse/Keeper com a seguinte variável de ambiente:
O profiler pode ser ativado mais tarde.

Opções adicionais para o profiler

O jemalloc oferece várias opções relacionadas ao profiler. Elas podem ser controladas modificando a variável de ambiente MALLOC_CONF. Por exemplo, o intervalo entre as amostras de alocação pode ser controlado com lg_prof_sample. Se quiser gerar o perfil de heap a cada N bytes, você pode habilitá-lo com lg_prof_interval. Recomenda-se consultar a página de referência do jemalloc para obter a lista completa de opções.

Outros recursos

ClickHouse/Keeper expõem métricas relacionadas ao jemalloc de várias formas.
AvisoÉ importante ter em mente que nenhuma dessas métricas é sincronizada com as outras, e os valores podem variar.

Tabela do sistema asynchronous_metrics

Referência

Tabela do sistema jemalloc_bins

Contém informações sobre alocações de memória feitas pelo alocador jemalloc em diferentes classes de tamanho (bins), agregadas de todas as arenas. Referência

Prometheus

Todas as métricas relacionadas ao jemalloc de asynchronous_metrics também são expostas por meio do endpoint Prometheus, tanto no ClickHouse quanto no Keeper. Referência

Comando 4LW jmst no Keeper

O Keeper é compatível com o comando 4LW jmst, que retorna estatísticas básicas do alocador:
Última modificação em 2 de julho de 2026