SYSTEM e comandos de quatro letras (4LW) no Keeper. Há várias maneiras de inspecionar os resultados:
- Coletar amostras em
system.trace_logsob o tipoJemallocSamplepara análise por consulta. - Visualizar estatísticas de memória em tempo real e obter perfis de heap por meio da interface web integrada do jemalloc (26.2+).
- Consultar o perfil de heap atual diretamente via SQL usando
system.jemalloc_profile_text(26.2+). - Gravar perfis de heap em disco e analisá-los com
jeprof.
Este guia se aplica às versões 25.9+.
Para versões anteriores, consulte o perfil de alocação para versões anteriores à 25.9.
Amostragem de alocações
jemalloc_enable_global_profiler habilitada:
jemalloc fará a amostragem das alocações e armazenará as informações internamente.
Você também pode ativar a amostragem por consulta usando a configuração jemalloc_enable_profiler.
Armazenando amostras do jemalloc em system.trace_log
system.trace_log como o tipo JemallocSample.
Para habilitar isso globalmente, use a configuração jemalloc_collect_global_profile_samples_in_trace_log:
jemalloc_collect_profile_samples_in_trace_log.
Exemplo: analisando o uso de memória de uma consulta
system.trace_log:
Se o ClickHouse foi iniciado com
jemalloc_enable_global_profiler, você não precisa habilitar jemalloc_enable_profiler.
O mesmo vale para jemalloc_collect_global_profile_samples_in_trace_log e jemalloc_collect_profile_samples_in_trace_log.system.trace_log:
Interface web do jemalloc
Esta seção se aplica às versões 26.2+.
/jemalloc.
Ela exibe métricas de memória em tempo real com gráficos, incluindo memória alocada, ativa, residente e mapeada, além de estatísticas por arena e por bin.
Você também pode buscar perfis de heap globais e por consulta diretamente pela interface web.
- ClickHouse
- Keeper
Obtendo perfis de heap por SQL
Esta seção se aplica às versões 26.2+.
system.jemalloc_profile_text permite obter e visualizar o perfil de heap atual do jemalloc diretamente por SQL, sem precisar de ferramentas externas nem de gravá-lo em disco antes.
A tabela tem uma única coluna:
Você pode consultar a tabela diretamente — não é necessário gravar um perfil de heap antes:
Formato de saída
jemalloc_profile_text_output_format, que oferece suporte a três valores:
raw— perfil de heap bruto, gerado pelo jemalloc.symbolized— formato compatível com o jeprof, com símbolos de função incorporados. Como os símbolos já estão incorporados, ojeprofpode analisar a saída sem precisar do binário do ClickHouse.collapsed(padrão) — pilhas colapsadas compatíveis com FlameGraph, uma pilha por linha com a contagem de bytes.
Configurações adicionais
jemalloc_profile_text_symbolize_with_inline(Bool, padrão:true) — Define se frames inline devem ser incluídos na simbolização. Desabilitar isso acelera significativamente a simbolização, mas reduz a precisão, pois chamadas de função inline não aparecerão nas stacks. Afeta apenas os formatossymbolizedecollapsed.jemalloc_profile_text_collapsed_use_count(Bool, padrão:false) — Ao usar o formatocollapsed, agrega por contagem de alocações em vez de bytes.
Exemplo: gerando um flame graph com SQL
collapsed, você pode passar a saída diretamente para o FlameGraph:
Gravando perfis de heap no disco
jeprof, poderá gravá-los no disco.
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.
No Keeper, o arquivo padrão é /tmp/jemalloc_keeper._pid_._seqnum_.heap e segue as mesmas regras.
Para gravar o perfil atual:
- ClickHouse
- Keeper
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:
Analisando arquivos de perfil de heap com jeprof
jemalloc chamada jeprof. Ela pode ser instalada de várias formas:
- Usando o gerenciador de pacotes do sistema
- Clonando o repositório do jemalloc e executando
autogen.sha partir da pasta raiz. Isso disponibilizará o scriptjeprofna pastabin
jeprof --help para ver a lista completa de opções.
Perfis de heap simbolizados
SYSTEM JEMALLOC FLUSH PROFILE.
O perfil simbolizado (com a extensão .symbolized) contém símbolos de função incorporados e pode ser analisado com o jeprof sem exigir o binário do ClickHouse.
Por exemplo, quando você executa:
/tmp/jemalloc_clickhouse.12345.0.heap.symbolized).
Em seguida, você poderá analisá-lo diretamente com jeprof:
Nenhum binário necessário: Ao usar perfis simbolizados (arquivos
.symbolized), você não precisa fornecer o caminho do binário do ClickHouse ao jeprof. Isso facilita muito a análise de perfis em máquinas diferentes ou depois que o binário tiver sido atualizado.Para perfis não simbolizados, Como alternativa,
jeprof usa addr2line para gerar stacktraces, o que pode ser bem lento.
Se esse for o caso, recomenda-se instalar uma implementação alternativa da ferramenta.llvm-addr2line funciona igualmente bem (mas observe que llvm-objdump não é compatível com jeprof)Depois, use-o assim: jeprof --tools addr2line:/usr/bin/llvm-addr2line,nm:/usr/bin/llvm-nm,objdump:/usr/bin/objdump,c++filt:/usr/bin/llvm-cxxfilt--base:
Exemplos
- Gere um arquivo de texto com cada procedimento em uma linha:
- Gere um arquivo PDF com o grafo de chamadas:
- Gere um arquivo de texto com cada procedimento em uma linha:
- Gere um arquivo PDF com um grafo de chamadas:
Gerando um flame graph
jeprof permite gerar pilhas colapsadas para criar flame graphs.
Você precisa usar o argumento --collapsed:
flamegraph.pl:
Opções adicionais para o profiler
jemalloc oferece muitas 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 você quiser gerar o heap profile a cada N bytes, pode ativá-lo usando lg_prof_interval.
Recomenda-se consultar a página de referência do jemalloc para obter uma lista completa das opções.
Outros recursos
jemalloc de várias formas.
Tabela de sistema asynchronous_metrics
Tabela de sistema jemalloc_bins
bins), agregadas a partir de todas as arenas.
Referência
Tabela do sistema jemalloc_stats (26.2+)
malloc_stats_print() como uma única string. Equivalente ao comando SYSTEM JEMALLOC STATS.
Prometheus
jemalloc de asynchronous_metrics também são expostas por meio do endpoint do Prometheus, tanto no ClickHouse quanto no Keeper.
Referência
Comando 4LW jmst no Keeper
jmst, que retorna estatísticas básicas do alocador: