SYSTEM y comandos de cuatro letras (4LW) en Keeper. Hay varias formas de inspeccionar los resultados:
- Recopilar muestras en
system.trace_logcon el tipoJemallocSamplepara analizar cada consulta. - Ver estadísticas de memoria en tiempo real y obtener perfiles de heap a través de la UI web de jemalloc integrada (26.2+).
- Consultar el perfil actual de heap directamente desde SQL mediante
system.jemalloc_profile_text(26.2+). - Volcar perfiles de heap a disco y analizarlos con
jeprof.
Esta guía se aplica a las versiones 25.9+.
Para versiones anteriores, consulte el perfilado de asignaciones para versiones anteriores a la 25.9.
Muestreo de asignaciones
jemalloc_enable_global_profiler habilitada:
jemalloc realizará un muestreo de las asignaciones y almacenará la información internamente.
También puede habilitar el muestreo por consulta mediante la configuración jemalloc_enable_profiler.
Almacenar muestras de jemalloc en system.trace_log
system.trace_log con el tipo JemallocSample.
Para habilitarlo globalmente, use la configuración jemalloc_collect_global_profile_samples_in_trace_log:
jemalloc_collect_profile_samples_in_trace_log.
Ejemplo: analizar el uso de memoria de una consulta
system.trace_log:
Si ClickHouse se inició con
jemalloc_enable_global_profiler, no es necesario habilitar jemalloc_enable_profiler.
Lo mismo ocurre con jemalloc_collect_global_profile_samples_in_trace_log y jemalloc_collect_profile_samples_in_trace_log.system.trace_log:
UI web de jemalloc
Esta sección se aplica a las versiones 26.2 o posteriores.
/jemalloc.
Muestra métricas de memoria en tiempo real con gráficos, incluidas allocated, active, resident y mapped, así como estadísticas por arena y por bin.
También puedes obtener perfiles de heap globales y por consulta directamente desde la UI.
- ClickHouse
- Keeper
Obtención de perfiles de heap desde SQL
Esta sección se aplica a las versiones 26.2+.
system.jemalloc_profile_text permite obtener y ver el perfil de heap actual de jemalloc directamente desde SQL, sin necesidad de herramientas externas ni de volcarlo antes a disco.
La tabla tiene una sola columna:
Puede consultar la tabla directamente; no es necesario volcar antes un perfil de heap:
Formato de salida
jemalloc_profile_text_output_format, que admite tres valores:
raw— perfil de heap en bruto, tal como lo genera jemalloc.symbolized— formato compatible con jeprof con símbolos de función integrados. Como los símbolos ya están integrados,jeprofpuede analizar la salida sin necesidad del binario de ClickHouse.collapsed(predeterminado) — collapsed stacks compatibles con FlameGraph, una pila por línea con el recuento de bytes.
Ajustes adicionales
jemalloc_profile_text_symbolize_with_inline(Bool, valor predeterminado:true) — Indica si se deben incluir los frames inline al simbolizar. Desactivarlo acelera significativamente la simbolización, pero reduce la precisión, ya que las llamadas a funciones inline no aparecerán en los stacks. Solo afecta a los formatossymbolizedycollapsed.jemalloc_profile_text_collapsed_use_count(Bool, valor predeterminado:false) — Al usar el formatocollapsed, agrupa por número de asignaciones en lugar de por bytes.
Ejemplo: generar un flame graph desde SQL
collapsed, puedes redirigir la salida directamente a FlameGraph:
Volcado de perfiles de heap a disco
jeprof, puedes volcarlos a disco.
De forma predeterminada, el archivo del perfil de heap se generará en /tmp/jemalloc_clickhouse._pid_._seqnum_.heap, donde _pid_ es el PID de ClickHouse y _seqnum_ es el número de secuencia global del perfil de heap actual.
Para Keeper, el archivo predeterminado es /tmp/jemalloc_keeper._pid_._seqnum_.heap y sigue las mismas reglas.
Para volcar el perfil actual:
- ClickHouse
- Keeper
prof_prefix a la variable de entorno MALLOC_CONF.
Por ejemplo, si quieres generar perfiles en la carpeta /data, donde el prefijo del nombre de archivo será my_current_profile, puedes ejecutar ClickHouse/Keeper con la siguiente variable de entorno:
Análisis de archivos de perfiles de heap con jeprof
jemalloc llamada jeprof. Se puede instalar de varias maneras:
- Usando el gestor de paquetes del sistema
- Clonando el repositorio de jemalloc y ejecutando
autogen.shdesde la carpeta raíz. Esto le proporcionará el scriptjeprofdentro de la carpetabin
jeprof --help para ver la lista completa de opciones.
Perfiles de heap simbolizados
SYSTEM JEMALLOC FLUSH PROFILE.
El perfil simbolizado (con la extensión .symbolized) contiene símbolos de función integrados y puede analizarse con jeprof sin necesidad del binario de ClickHouse.
Por ejemplo, cuando ejecutas:
/tmp/jemalloc_clickhouse.12345.0.heap.symbolized).
Luego puedes analizarlo directamente con jeprof:
No se requiere el binario: Al usar perfiles simbolizados (archivos
.symbolized), no necesitas proporcionar a jeprof la ruta del binario de ClickHouse. Esto facilita mucho el análisis de perfiles en distintas máquinas o después de actualizar el binario.Para perfiles no simbolizados, Como alternativa,
jeprof usa addr2line para generar stacktraces, lo que puede ser bastante lento.
Si es así, se recomienda instalar una implementación alternativa de la herramienta.llvm-addr2line funciona igual de bien (pero tenga en cuenta que llvm-objdump no es compatible con jeprof).Y después úselo así: jeprof --tools addr2line:/usr/bin/llvm-addr2line,nm:/usr/bin/llvm-nm,objdump:/usr/bin/objdump,c++filt:/usr/bin/llvm-cxxfilt--base:
Ejemplos
- Genere un archivo de texto con cada procedimiento en una línea:
- Genera un archivo PDF con el grafo de llamadas:
- Genere un archivo de texto con un procedimiento por línea:
- Genera un archivo PDF con un grafo de llamadas:
Generar un flame graph
jeprof permite generar collapsed stacks para crear flame graphs.
Debe usar el argumento --collapsed:
flamegraph.pl:
Opciones adicionales para el perfilador
jemalloc ofrece muchas opciones relacionadas con el perfilador. Se pueden controlar modificando la variable de entorno MALLOC_CONF.
Por ejemplo, el intervalo entre muestras de asignación puede controlarse con lg_prof_sample.
Si desea volcar el perfil de heap cada N bytes, puede habilitarlo con lg_prof_interval.
Se recomienda consultar la página de referencia de jemalloc para ver la lista completa de opciones.
Otros recursos
jemalloc de muchas formas distintas.
Tabla del sistema asynchronous_metrics
Tabla del sistema jemalloc_bins
Tabla del sistema jemalloc_stats (26.2+)
malloc_stats_print() en una sola cadena. Equivale al comando SYSTEM JEMALLOC STATS.
Prometheus
jemalloc de asynchronous_metrics también están expuestas a través del endpoint de Prometheus tanto en ClickHouse como en Keeper.
Referencia
Comando 4LW jmst de Keeper
jmst, que devuelve estadísticas básicas del asignador de memoria: