Pour les travaux de mise au point, ses bénéfices - la flamme figure.

Figure flamme, qui est FlameGraph, est super vache violon Brendan Gregg de quelque chose, qui est le principal outil pour générer le traitement plus facile la visualisation des données de profil pour les développeurs de voir. La première fois que je connais le tableau de la flamme, il devrait être du chapitre OpenResty introduit aussi le printemps, vous pouvez aller voir cette technologie de suivi dynamique de l'article détaillé Talk.

Avant, tout mon travail depuis longtemps sont presque toujours sur Go et Go natif dans un certain nombre d'outils de profil correspondants, et les méthodes de visualisation, donc je ne l'ai pas utilisé comment la flamme Fig. Mais il a commencé à se développer après la rouille TiKV, j'abasourdi immédiatement, à Rust aucun outil officiel pour faire ces choses, comment faire? Bien entendu, nous avons commencé à utiliser le feu d'un plan.

Figure flamme à l'aide d'un très simple, nous avons seulement besoin de cloner le code sur elle, j'ai l'habitude que d'être jeté dans le script concerné / Opt / FlameGraph  Ensuite, le dos sera décrit à titre d'exemple ce répertoire.

Un exemple simple de l'installation:

wget https://github.com/brendangregg/FlameGraph/archive/master.zipunzip master.zip sudo mv FlameGraph maître / / opt / FlameGraph

CPU

Pour TiKV, les problèmes de performance sont plus préoccupés de la CPU, après tout, cela est une chose très intuitive.

Quand nous trouvons une grande pression CPU TiKV, ils seront généralement TiKV être perf, comme suit:

-F 99 perf enregistrement -p tikv_pid -g - sommeil script 60perf >  out.perf

Au-dessus, nous utilisons un échantillonnage fréquent 99 HZ TiKV pour 60 s, puis génère un fichier d'échantillon correspondant. Ensuite, nous générons le tableau de la flamme:

/opt/FlameGraph/stackcollapse-perf.pl out.perf >  out.folded /opt/FlameGraph/flamegraph.pl out.folded >  cpu.svg

Ce qui précède est généré par un diagramme de flamme TiKV, nous constatons qu'un problème GRPC thread principal en tête c noyau GRPC ci-dessus, et c'est maintenant c noyau GRPC a été traduit généralement que les coûts trop CPU, mais je crois que, avec la force de l'équipe Google GRPC ce problème devrait être en mesure d'obtenir.

En outre, le fil GRPC ci-dessus, nous pouvons voir que le codec protobuf aussi prennent beaucoup de CPU, cela est un problème à cette bibliothèque protobuf rouille stade, la performance relativement médiocre, mais heureusement, il y a un moyen d'optimiser le dos, nous sommes prêts à passer immédiatement.

De plus, doivent également faire attention au fil conducteur qui RocksDB tête raftstore Get et écrire, pour TiKV, si fil de raftstore goulot d'étranglement a émergé, le processus sera ralenti Raft, donc ce fil est naturellement notre attention sur l'objet l'optimisation.

Vous pouvez voir, Obtenez les frais généraux fait est que nous obtenons des entrées engagées Raft, puis jeter appliquer Raft log fil asynchrone à appliquer, si naturellement cette étape Obtenir jeter naturellement appliquer travailleur à traiter. De plus, écrire, compte tenu du format de journal Raft, nous pouvons être très pratique d'utiliser un RocksDB insert_with_hint  Caractéristiques à optimiser, ou sera placé dans un autre thread écrire processus async.

Vous pouvez le voir, nous passons le diagramme de la flamme, peut trouver très facilement consume en tête du processeur la plupart du temps où, saura comment optimiser.

Ici dire quelque chose, nous avons l'habitude de regarder comme un endroit donné la majeure partie de la consommation du processeur, mais parfois un petit endroit humble, mais aussi besoin d'attirer l'attention de tout le monde. Ce n'est pas une petite place telle peut prendre CPU beaucoup, mais de se demander pourquoi la flamme apparaîtra à l'intérieur du tableau, car selon la logique normale est impossible. Nous observons le dessin CPU flamme ce petit endroit peu visible, au moins trouvé plusieurs code est bogue.

mémoire

En général, j'utilise le plus est la flamme de l'unité centrale de dessin, après tout, le plus intuitif, mais le tableau de la flamme ne peut pas simplement CPU. Nous devons également examiner d'autres indicateurs en plus de la CPU. Il fut un temps, je continuais à augmenter la mémoire de problème TiKV a été un mal de tête, bien qu'il y ait TiKV OOM, mais dans l'ensemble il n'y a pas de bonne façon de trouver à la fin est où le problème est. Par conséquent, étudier une petite carte mémoire de flamme.

Pour le profil de la flamme TiKV de carte mémoire, en fait, nous avons besoin de surveiller l'allocation malloc TiKV, tant que malloc, il montre que pendant ce temps l'allocation de mémoire de TiKV. Parce que TiKV usage interne jemalloc, et nous n'avons pas utilisé le système malloc, donc nous ne pouvons pas utiliser directement pour sonder la perf fonction malloc du système. Heureusement, la sonde peut prendre en charge l'perf de plus dynamique, nous TiKV de malloc ajouté:

perf sonde -x / déploiement / bin / tikv-serveur -a malloc

Ensuite, une figure de la flamme d'échantillonnage:

perf enregistrement -e probe_tikv: malloc -F 99 -p tikv_pid -g - script 10perf sommeil >  out.perf /opt/FlameGraph/stackcollapse-perf.pl out.perf >  out.folded /opt/FlameGraph/flamegraph.pl --colors = mem out.folded >  mem.svg

Ce qui précède est une carte générée flamme malloc, nous pouvons voir que la plupart des frais généraux de mémoire est toujours en RocksDB ci-dessus.

Par carte de flamme malloc, nous avons découvert RocksDB de Réadoption très fréquente dans la distribution des appels, directement derrière la pile d'allocation disposé à examiner l'impact ci-dessus, mais cela est en fait pas grand-chose sur la performance à: sueur :.

En plus de malloc, nous pouvons sonder faute de la page principale mineure et faute de page, parce qu'il a été découvert par pidstat observé TiKV Peu défaut majeur de page, donc nous sondons que le mineur, comme suit:

perf enregistrement mineur défauts -e -F 99 -p $ 1 à G - sommeil script 10perf >  out.perf /opt/FlameGraph/stackcollapse-perf.pl out.perf >  out.folded /opt/FlameGraph/flamegraph.pl --colors = mem out.folded >  minflt.svg

off CPU

Parfois, nous serons confrontés à un problème. La performance du système n'augmente pas, mais le processeur est très occupé, ce qui est très probable attendent IO, ou les verrouiller, donc nous devons regarder où dans le CPU final et ainsi de suite.

Pour perf, on peut utiliser de la façon suivante l'échantillonnage de CPU.

perf enregistrer -e Serv: sched_stat_sleep -e Serv: sched_switch -e Serv: sched_process_exit -p tikv_pid -g -o perf.data.raw sommeil 10perf injectent -v -s -i perf.data.raw -o perf.data

Malheureusement, le code ci-dessus échoue dans Ubuntu ou CentOS ci-dessus, en général, est maintenant le dernier système principal pour des raisons de performance, et ne prennent pas en charge les statistiques sched. Pour Ubuntu, apparemment seulement pour recompiler le noyau, et CentOS, seulement besoin d'installer le noyau debuginfo, puis ouvrez les statistiques sched sur, comme suit:

DNF install kernel-debug kernel-debug kernel-devel-debug-debuginfoecho 1 | sudo T / proc / sys / kernel / sched_schedstats

La figure génère ensuite la flamme de cpu:

-F comm perf script, pid, tid, cpu, temps, période, événement, ip, sym, DSO, trace | awk ' NF >  4 {exec = 1 $; period_ms = int (5/1000000 $)} NF >  1 && NF < = 4 && period_ms >  0 {print $ 2} NF <  2 && period_ms >  0 {printf « % s % D », Exec, period_ms} « | /opt/FlameGraph/stackcollapse.pl | /opt/FlameGraph/flamegraph.pl --countname = ms --title = "Flame Time Off CPU Graph" --colors = io >  offcpu.svg

Le tableau ci-dessus est TiKV une fois au large de la CPU de la flamme se trouve aussi longtemps que la boucle d'événements de serveur et le moniteur de temps CPU de deux longs fils, boucle d'événements serveur est en attente pour les demandes de réseau externe, parce que je ne l'ai pas test de stress perf temps, Endure est normal. Le moniteur de temps est le sommeil pendant un certain temps, puis vérifier le temps n'est pas là un retour de saut, parce qu'il ya un long sommeil, il est donc normal.

Je l'ai dit ci-dessus, pour les utilisateurs d'Ubuntu, recompiler apparemment seulement le noyau, ouvrez les statistiques sched, si vous ne jetez pas, nous pouvons passer à travers systemtap. SystemTap est un autre outil de profil, en fait, devrait être considéré comme une autre langue.

Nous pouvons directement utiliser l'outil OpenResty systemtap, génère une figure de flamme hors CPU comme suit:

wget https://raw.githubusercontent.com/openresty/openresty-systemtap-toolkit/master/sample-bt-off-cpuchmod + x échantillon-bt-off-cpu ./sample-bt-off-cpu -t 10 -p -u 13491 >  out.stap /opt/FlameGraph/stackcollapse-stap.pl out.stap >  out.folded /opt/FlameGraph/flamegraph.pl --colors = io out.folded >  offcpu.svg

On peut voir à l'aide de façon systemptap est rien comme perf, mais systemtap plus compliquée, après tout, il peut être considéré comme une langue. Et qui vient aussi l'outil de génération de flamme associée de FlameGraph figure.

Figure Diff de la flamme

En plus de plusieurs couramment la flamme figure, on peut effectivement être deux diff flamme figure, génère une figure de flamme diff, comme suit:

/opt/difffolded.pl out.folded1 out.folded2 | ./flamegraph.pl >  diff2.svg

Mais maintenant, je vais générer, il n'a pas été étudié en détail, ici est de ne pas faire trop expliqué.

résumé

Cette vue d'ensemble de brève de la façon dont nous utilisons TiKV l'intérieur de la carte de la flamme pour résoudre le problème à ce stade se trouve principalement de nombreux problèmes par CPU Figure flamme, mais je crois que l'étude de l'utilisation d'autres chiffres de la flamme, le suivi sera toujours utile.

petites et moyennes entreprises rentables choix - petits nettoyage des carreaux visites de l'aménagement du territoire robot
Précédent
Renault Sandero version RS Édition spéciale édition limitée 1500
Prochain
« Comme un cur d'ombre » exposition alambics paroles émotionnelles Verse premiers utilisateurs « empathie »
Jeunes un sens de soufflage, construction FILA spécifiquement pour les tendances vêtements d'automne et d'hiver fille
prendre un grand pas Aisément un rêve: OPPO caméra sagesse AI R15 évaluation spéciale
Genius gauche, une différence étape, ce titre a été victoires consécutives abus homme Ressorts
CVPR 2018 Résumé: Partie IV
POLO débuts avec plus de dix ans, comment « peu de viande fraîche » la performance Vios FS
« Z Tempête 4 » montrent une forte route entrant à Dongguan, les prisonniers Raymond Louis Cheung ont été salués modèle
Sacai x conception fragment ne pas l'acheter n'a pas d'importance! Cette paire de bénédiction des hautes lumières Converse vous avez certainement la possibilité d'avoir!
Maison avait deux fils et à l'automne, magasin Chongqing Tongliang, magasin ouvert aujourd'hui à Wushan
A propos de la différence entre HTTP et HTTPS
sixième année des étudiants écrit plus de 10 millions de points a gagné l'éloge, il a en fait écrit ce
Wei Wang Beiqi S50 certains modèles de chute officielle d'une baisse de 10000 yuans