SYSTEM et de commandes à quatre lettres (4LW) dans Keeper. Il existe plusieurs façons d’examiner les résultats :
- Collecter des échantillons dans
system.trace_logavec le typeJemallocSamplepour une analyse par requête. - Afficher les statistiques mémoire en direct et récupérer des profils du tas via l’interface web jemalloc intégrée (26.2+).
- Interroger directement le profil du tas actuel depuis SQL à l’aide de
system.jemalloc_profile_text(26.2+). - Écrire les profils du tas sur disque et les analyser avec
jeprof.
Ce guide s’applique aux versions 25.9+.
Pour les versions antérieures, veuillez consulter le guide de profilage des allocations pour les versions antérieures à 25.9.
Échantillonnage des allocations
jemalloc_enable_global_profiler activée :
jemalloc effectuera un échantillonnage des allocations et stockera les informations en interne.
Vous pouvez également activer l’échantillonnage pour chaque requête à l’aide du paramètre jemalloc_enable_profiler.
Stocker les échantillons jemalloc dans system.trace_log
system.trace_log avec le type JemallocSample.
Pour l’activer globalement, utilisez la config jemalloc_collect_global_profile_samples_in_trace_log :
jemalloc_collect_profile_samples_in_trace_log.
Exemple : analyser l’utilisation mémoire d’une requête
system.trace_log :
Si ClickHouse a été démarré avec
jemalloc_enable_global_profiler, vous n’avez pas besoin d’activer jemalloc_enable_profiler.
Il en va de même pour jemalloc_collect_global_profile_samples_in_trace_log et jemalloc_collect_profile_samples_in_trace_log.system.trace_log :
Interface web jemalloc
Cette section s’applique aux versions 26.2+.
/jemalloc.
Elle affiche des métriques mémoire en temps réel sous forme de graphiques, notamment la mémoire allouée, active, résidente et mappée, ainsi que des statistiques par arène et par bin.
Vous pouvez également récupérer directement depuis l’interface des profils du tas globaux et par requête.
- ClickHouse
- Keeper
Récupération des profils du tas depuis SQL
Cette section s’applique aux versions 26.2 et ultérieures.
system.jemalloc_profile_text vous permet de récupérer et d’afficher le profil du tas jemalloc actuel directement depuis SQL, sans nécessiter d’outils externes ni d’écriture préalable sur disque.
La table comporte une seule colonne :
| Colonne | Type | Description |
|---|---|---|
line | String | Ligne du profil du tas jemalloc symbolisé. |
Format de sortie
jemalloc_profile_text_output_format, qui accepte trois valeurs :
raw— profil du tas brut généré par jemalloc.symbolized— format compatible avec jeprof, avec symboles de fonction intégrés. Les symboles étant déjà intégrés,jeprofpeut analyser la sortie sans avoir besoin du binaire ClickHouse.collapsed(par défaut) — collapsed stacks compatibles avec FlameGraph, avec une pile par ligne et le nombre d’octets correspondant.
Paramètres supplémentaires
jemalloc_profile_text_symbolize_with_inline(Bool, par défaut :true) — Indique s’il faut inclure les frames inline lors de la symbolisation. Désactiver cette option accélère considérablement la symbolisation, mais réduit la précision, car les appels de fonctions inline n’apparaîtront pas dans les piles d’appels. Affecte uniquement les formatssymbolizedetcollapsed.jemalloc_profile_text_collapsed_use_count(Bool, par défaut :false) — Lors de l’utilisation du formatcollapsed, agrège par nombre d’allocations plutôt que par octets.
Exemple : générer un flame graph à partir d’une requête SQL
collapsed, vous pouvez rediriger directement la sortie vers FlameGraph :
Vidage des profils du tas sur disque
jeprof, vous pouvez les vider sur disque.
Par défaut, le fichier de profil du tas sera généré dans /tmp/jemalloc_clickhouse._pid_._seqnum_.heap, où _pid_ est le PID de ClickHouse et _seqnum_ est le numéro de séquence global du profil du tas actuel.
Pour Keeper, le fichier par défaut est /tmp/jemalloc_keeper._pid_._seqnum_.heap et suit les mêmes règles.
Pour vider le profil actuel :
- ClickHouse
- Keeper
prof_prefix à la variable d’environnement MALLOC_CONF.
Par exemple, si vous souhaitez générer des profils dans le dossier /data avec le préfixe de nom de fichier my_current_profile, vous pouvez exécuter ClickHouse/Keeper avec la variable d’environnement suivante :
Analyse des fichiers de profil du tas avec jeprof
jemalloc appelé jeprof. Il peut être installé de plusieurs façons :
- À l’aide du gestionnaire de paquets du système
- En clonant le dépôt jemalloc et en exécutant
autogen.shdepuis le répertoire racine. Vous obtiendrez ainsi le scriptjeprofdans le dossierbin
jeprof --help pour obtenir la liste complète des options.
Profils du tas symbolisés
SYSTEM JEMALLOC FLUSH PROFILE.
Le profil symbolisé (avec l’extension .symbolized) contient des symboles de fonction intégrés et peut être analysé par jeprof sans nécessiter le binaire de ClickHouse.
Par exemple, lorsque vous exécutez :
/tmp/jemalloc_clickhouse.12345.0.heap.symbolized).
Vous pouvez ensuite l’analyser directement avec jeprof :
Aucun binaire requis : lorsque vous utilisez des profils symbolisés (fichiers
.symbolized), vous n’avez pas besoin de fournir à jeprof le chemin du binaire ClickHouse. Cela facilite grandement l’analyse des profils sur différentes machines ou après une mise à jour du binaire.Pour les profils non symbolisés, Vous pouvez également utiliser
jeprof utilise addr2line pour générer des stacktraces, ce qui peut être très lent.
Si c’est le cas, il est recommandé d’installer une implémentation alternative de cet outil.llvm-addr2line, qui fonctionne tout aussi bien (mais notez que llvm-objdump n’est pas compatible avec jeprof)Utilisez-le ensuite comme ceci : jeprof --tools addr2line:/usr/bin/llvm-addr2line,nm:/usr/bin/llvm-nm,objdump:/usr/bin/objdump,c++filt:/usr/bin/llvm-cxxfilt--base :
Exemples
- Générez un fichier texte avec une procédure par ligne :
- Générez un fichier PDF contenant un graphe d’appels :
- Générez un fichier texte contenant une procédure par ligne :
- Générez un fichier PDF avec un graphe d’appels :
Génération d’un flame graph
jeprof permet de générer des collapsed stack afin de créer des flame graphs.
Vous devez utiliser l’argument --collapsed :
flamegraph.pl :
Options supplémentaires pour le profileur
jemalloc propose de nombreuses options liées au profileur. Elles peuvent être configurées en modifiant la variable d’environnement MALLOC_CONF.
Par exemple, l’intervalle entre les échantillons d’allocation peut être contrôlé avec lg_prof_sample.
Si vous souhaitez générer un profil du tas tous les N octets, vous pouvez l’activer avec lg_prof_interval.
Nous vous recommandons de consulter la page de référence de jemalloc pour obtenir la liste complète des options.
Autres ressources
metrics liées à jemalloc sous de nombreuses formes différentes.
Table système asynchronous_metrics
Table système jemalloc_bins
Table système jemalloc_stats (26.2+)
malloc_stats_print() dans une seule chaîne. Équivalent à la commande SYSTEM JEMALLOC STATS.
Prometheus
jemalloc de asynchronous_metrics sont également exposées via l’endpoint Prometheus dans ClickHouse et Keeper.
Référence
Commande 4LW jmst dans Keeper
jmst, qui renvoie des statistiques de base de l’allocateur :